Se você deseja gerar automaticamente o
id
, não forneça um, mesmo que seja null
. Portanto, remova o id
de addProduect
método:@Override
public void addProduct(String description, double price, Date date) {
jdbcTemplate.update("INSERT INTO products values(?, ?, ?)", description, price, date);
}
Além disso, faça seu
id
campo auto-increment
, como nesta pergunta
. Ou altere o
addProduect
e use EntityManager#persist
método:@Override
public void addProduct(Product product) {
entityManager.persist(product);
}
Sobre o erro:
Como seu formulário não leva o
id
valor do cliente, o /newproduct
endpoint teria um Product
com null
como seu id
valor:@RequestMapping(value = "/newproduct", method = RequestMethod.POST)
public ModelAndView submitForm(@ModelAttribute("product") Product product) { ... }
Então você passa este
null
value como o parâmetro para o addProduect
método:prDao.addProduct(product.getId(), ...)
E finalmente
addProduect
tentaria salvar esse null
value como o valor da Chave Primária , que tem um Não-Nulo restrição, então você tem esse erro. Além disso, usando Entidade objetos como meio de comunicação com o cliente, por exemplo.
Product
, não é uma boa prática. Tente definir algumas abstrações auxiliares como Forms ou DTOs e use-as para manipulação de formulários ou montagem de respostas.