Hvis du automatisk vil generere id , så giv ikke en, selv den er null . Så fjern id fra addProduect metode:
@Override
public void addProduct(String description, double price, Date date) {
jdbcTemplate.update("INSERT INTO products values(?, ?, ?)", description, price, date);
}
Lav også dit id felt auto-increment , som i dette spørgsmål
.
Eller skift addProduct metode og brug EntityManager#persist metode:
@Override
public void addProduct(Product product) {
entityManager.persist(product);
}
Om fejlen:
Da din formular ikke tager id værdi fra klienten, /newproduct slutpunkt ville have et Product med null som dens id værdi:
@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("product") Product product) { ... }
Så sender du denne null værdi som parameter til addProduct metode:
prDao.addProduct(product.getId(), ...)
Og endelig addProduct ville prøve at gemme den null værdi som værdien af den Primære nøgle , som har en Ikke-Null begrænsning, så du har den fejl.
Også ved at bruge Entity objekter som kommunikationsmiddel med klient, f.eks. Product , er ikke en god praksis. Prøv at definere nogle hjælpeabstraktioner som formularer eller DTO'er og brug dem til formularhåndtering eller svarsamling.