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.