Om du automatiskt vill generera id
, ange då inte en, även om den är null
. Så ta bort id
från addProduect
metod:
@Override
public void addProduct(String description, double price, Date date) {
jdbcTemplate.update("INSERT INTO products values(?, ?, ?)", description, price, date);
}
Skapa även ditt id
fältet auto-increment
, som i den här frågan
.
Eller ändra addProduct
metod och använd EntityManager#persist
metod:
@Override
public void addProduct(Product product) {
entityManager.persist(product);
}
Om felet:
Eftersom ditt formulär inte tar id
värde från klienten, /newproduct
slutpunkten skulle ha en Product
med null
som dess id
värde:
@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("product") Product product) { ... }
Sedan skickar du denna null
värde som parameter till addProduct
metod:
prDao.addProduct(product.getId(), ...)
Och slutligen addProduct
skulle försöka spara den null
värde som värdet på Primärnyckeln , som har en Non-Null begränsning, så du har det felet.
Använder även Entity objekt som kommunikationsmedel med klient, t.ex. Product
, är inte en bra praxis. Försök att definiera några extra abstraktioner som formulär eller DTO och använd dem för formulärhantering eller svarssammansättning.