sql >> Base de Datos >  >> RDS >> PostgreSQL

ID de generación automática en Spring MVC

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.