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.