PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Générer automatiquement un identifiant dans Spring MVC

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.