Pokud chcete automaticky vygenerovat id , pak žádný nezadávejte, i když je null . Odstraňte tedy id z addProduect metoda:
@Override
public void addProduct(String description, double price, Date date) {
jdbcTemplate.update("INSERT INTO products values(?, ?, ?)", description, price, date);
}
Udělejte si také id pole auto-increment , jako v této otázce
.
Nebo změňte addProduct a použijte EntityManager#persist metoda:
@Override
public void addProduct(Product product) {
entityManager.persist(product);
}
O chybě:
Protože váš formulář nebere id hodnotu od klienta, /newproduct koncový bod by měl Product s null jako jeho id hodnota:
@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("product") Product product) { ... }
Potom předáte toto null hodnotu jako parametr do addProduct metoda:
prDao.addProduct(product.getId(), ...)
A nakonec addProduct pokusí se uložit null hodnotu jako hodnotu Primárního klíče , který má Null omezení, takže máte tuto chybu.
Také pomocí Entity objekty jako prostředek komunikace s klientem, např. Product , není dobrá praxe. Zkuste definovat nějaké pomocné abstrakce, jako jsou formuláře nebo DTO, a použijte je pro manipulaci s formuláři nebo sestavování odpovědí.