Wenn Sie die id
automatisch generieren möchten , dann geben Sie keinen an, auch wenn er null
ist . Entfernen Sie also die id
von addProduect
Methode:
@Override
public void addProduct(String description, double price, Date date) {
jdbcTemplate.update("INSERT INTO products values(?, ?, ?)", description, price, date);
}
Machen Sie auch Ihre id
Feld auto-increment
, wie in dieser Frage
.
Oder ändern Sie addProduect
-Methode und verwenden Sie EntityManager#persist
Methode:
@Override
public void addProduct(Product product) {
entityManager.persist(product);
}
Über den Fehler:
Da Ihr Formular nicht die id
übernimmt Wert vom Client, der /newproduct
Endpunkt hätte ein Product
mit null
als seine id
Wert:
@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("product") Product product) { ... }
Dann übergeben Sie diesen null
value als Parameter für addProduect
Methode:
prDao.addProduct(product.getId(), ...)
Und schließlich addProduect
würde versuchen, diesen null
zu speichern value als Wert des Primärschlüssels , die eine Nicht-Null hat Beschränkung, also hast du diesen Fehler.
Auch mit Entity Objekte als Kommunikationsmittel mit dem Kunden, z.B. Product
, ist keine gute Praxis. Versuchen Sie, einige Hilfsabstraktionen wie Formulare oder DTOs zu definieren, und verwenden Sie sie für die Formularbehandlung oder das Zusammenstellen von Antworten.