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í.