Si vous souhaitez générer automatiquement l'id
, alors n'en fournissez pas, même s'il est null
. Donc, supprimez le id
de addProduect
méthode :
@Override
public void addProduct(String description, double price, Date date) {
jdbcTemplate.update("INSERT INTO products values(?, ?, ?)", description, price, date);
}
Aussi, faites votre id
champ auto-increment
, comme dans cette question
.
Ou modifiez le addProduct
et utilisez EntityManager#persist
méthode :
@Override
public void addProduct(Product product) {
entityManager.persist(product);
}
À propos de l'erreur :
Puisque votre formulaire ne prend pas le id
valeur du client, le /newproduct
le point de terminaison aurait un Product
avec null
comme son id
valeur :
@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("product") Product product) { ... }
Ensuite, vous passez ce null
valeur comme paramètre de addProduct
méthode :
prDao.addProduct(product.getId(), ...)
Et enfin addProduct
essaierait de sauvegarder ce null
valeur comme valeur de la clé primaire , qui a un Non-Null contrainte, donc vous avez cette erreur.
Aussi, en utilisant Entity objets comme moyen de communication avec le client, par ex. Product
, n'est pas une bonne pratique. Essayez de définir des abstractions auxiliaires comme les formulaires ou les DTO et utilisez-les pour la gestion des formulaires ou l'assemblage des réponses.