Si desea generar automáticamente el id
, entonces no proporcione uno, incluso si es null
. Entonces, elimine el id
de addProduect
método:
@Override
public void addProduct(String description, double price, Date date) {
jdbcTemplate.update("INSERT INTO products values(?, ?, ?)", description, price, date);
}
Además, haz tu id
campo auto-increment
, como en esta pregunta
.
O bien, cambie el addProduct
método y use EntityManager#persist
método:
@Override
public void addProduct(Product product) {
entityManager.persist(product);
}
Sobre el error:
Dado que su formulario no toma el id
valor del cliente, el /newproduct
el punto final tendría un Product
con null
como su id
valor:
@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("product") Product product) { ... }
Luego pasas este null
value como parámetro para addProduct
método:
prDao.addProduct(product.getId(), ...)
Y finalmente addProduct
intentaría guardar ese null
valor como el valor de la clave principal , que tiene un no nulo restricción, entonces tienes ese error.
Además, usando Entidad objetos como medio de comunicación con el cliente, p. Product
, no es una buena práctica. Intente definir algunas abstracciones auxiliares como formularios o DTO y utilícelas para el manejo de formularios o el ensamblaje de respuestas.