PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Gerar ID automaticamente no Spring MVC


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.