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.