Jeśli chcesz automatycznie wygenerować id
, to nie podawaj, nawet jeśli jest null
. Usuń więc id
z addProduect
metoda:
@Override
public void addProduct(String description, double price, Date date) {
jdbcTemplate.update("INSERT INTO products values(?, ?, ?)", description, price, date);
}
Ponadto zrób swój id
pole auto-increment
, jak w tym pytanie
.
Lub zmień addProduct
metody i użyj EntityManager#persist
metoda:
@Override
public void addProduct(Product product) {
entityManager.persist(product);
}
O błędzie:
Ponieważ Twój formularz nie przyjmuje id
wartość od klienta, /newproduct
punkt końcowy miałby Product
z null
jako jego id
wartość:
@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("product") Product product) { ... }
Następnie przekazujesz to null
wartość jako parametr addProduct
metoda:
prDao.addProduct(product.getId(), ...)
I wreszcie addProduct
spróbuje zapisać to null
wartość jako wartość klucza podstawowego , który ma Niepusty ograniczenie, więc masz ten błąd.
Również za pomocą Entity obiekty jako środek komunikacji z klientem, m.in. Product
, nie jest dobrą praktyką. Spróbuj zdefiniować pewne abstrakcje pomocnicze, takie jak formularze lub DTO, i użyj ich do obsługi formularzy lub asemblacji odpowiedzi.