PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

ID in Spring MVC automatisch generieren

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.