Ако искате автоматично да генерирате id
, тогава не предоставяйте такъв, дори да е null
. Така че премахнете id
от addProduect
метод:
@Override
public void addProduct(String description, double price, Date date) {
jdbcTemplate.update("INSERT INTO products values(?, ?, ?)", description, price, date);
}
Освен това направете своя id
поле auto-increment
, както в този въпрос
.
Или променете addProduct
и използвайте EntityManager#persist
метод:
@Override
public void addProduct(Product product) {
entityManager.persist(product);
}
Относно грешката:
Тъй като вашият формуляр не приема id
стойност от клиента, /newproduct
крайната точка ще има Product
с null
като неговия id
стойност:
@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("product") Product product) { ... }
След това предавате този null
стойност като параметър към addProduct
метод:
prDao.addProduct(product.getId(), ...)
И накрая addProduct
ще се опита да запази този null
стойност като стойността на първичния ключ , който има не-нулево ограничение, така че получавате тази грешка.
Освен това, използвайки Entity обекти като средство за комуникация с клиента, напр. Product
, не е добра практика. Опитайте се да дефинирате някои спомагателни абстракции като формуляри или DTO и да ги използвате за обработка на формуляри или сглобяване на отговор.