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.