Nếu bạn muốn tự động tạo id
, sau đó không cung cấp một, ngay cả khi nó null
. Vì vậy, hãy xóa id
từ addProduect
phương pháp:
@Override
public void addProduct(String description, double price, Date date) {
jdbcTemplate.update("INSERT INTO products values(?, ?, ?)", description, price, date);
}
Ngoài ra, hãy tạo id
của bạn trường auto-increment
, như trong câu hỏi
này .
Hoặc thay đổi addProduct
và sử dụng EntityManager#persist
phương pháp:
@Override
public void addProduct(Product product) {
entityManager.persist(product);
}
Về lỗi:
Vì biểu mẫu của bạn không lấy id
giá trị từ máy khách, /newproduct
điểm cuối sẽ có Product
với null
dưới dạng id
của nó giá trị:
@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("product") Product product) { ... }
Sau đó, bạn chuyển null
này giá trị làm tham số cho addProduct
phương pháp:
prDao.addProduct(product.getId(), ...)
Và cuối cùng là addProduct
sẽ cố gắng lưu null
đó giá trị như giá trị của Khóa chính , có một Không rỗng ràng buộc, vì vậy bạn gặp lỗi đó.
Ngoài ra, bằng cách sử dụng Thực thể các đối tượng làm phương tiện giao tiếp với khách hàng, ví dụ:Product
, không phải là một thực hành tốt. Cố gắng xác định một số trừu tượng bổ trợ như Biểu mẫu hoặc DTO và sử dụng chúng để xử lý biểu mẫu hoặc tập hợp phản hồi.