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.