Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

888
Vistas
Usando CrudRepository.save (Entidad) para insertar una Entidad con un campo @ID predefinido usando spring-data-jdbc

Estoy usando CrudRepository.save(Entity) para insertar una Entidad con @ID ya poblada.

Recibo la siguiente excepción.

 Caused by: org.springframework.dao.IncorrectUpdateSemanticsDataAccessException: Failed to update entity [com.comanyname.repository.Entiy.class]. Id [ed384316-9c22-4b63-90fd-ec02fdac2b86] not found in database.

Puedo entender el problema ya que el campo @ID ya está lleno, AggregateChangeExecutor aquí está tratando esta acción como DbAction.Update.

Entonces, quería saber si hay alguna forma en que pueda usar CrudRepository.save(Entity) para insertar una nueva entidad con un campo @ID predefinido, ya que quería usar el gancho @DomainEvent en CrudRepository.save (Entidad).

Siento que esto es un error en spring-data-jdbc . Solo quería una opinión/solución aquí.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

De acuerdo con Spring Data Refrence Documentation , el JPA EntiyManager subyacente utiliza tres estrategias para determinar si una entidad es nueva:

  1. Inspección de propiedad de versión e Id-propiedad (predeterminada): por defecto, Spring Data JPA inspecciona primero si hay una propiedad de versión de tipo no primitivo. Si existe la entidad se considera nueva si el valor es null . Sin tal propiedad de versión, Spring Data JPA inspecciona la propiedad del identificador de la entidad dada. Si la propiedad del identificador es null , se supone que la entidad es nueva. De lo contrario, se supone que no es nuevo.

  2. Implementación de Persistable : si una entidad implementa Persistable , Spring Data JPA delega la nueva detección al método isNew(…) de la entidad. Vea el JavaDoc para más detalles.

  3. Implementación EntityInformation : puede personalizar la abstracción de EntityInformation utilizada en la implementación de SimpleJpaRepository creando una subclase de JpaRepositoryFactory y anulando el getEntityInformation(…) consecuencia. Luego debe registrar la implementación personalizada de JpaRepositoryFactory como un bean Spring. Tenga en cuenta que esto rara vez debería ser necesario. Vea el JavaDoc para más detalles.

En tu caso, usar la segunda estrategia podría ser la más útil. Espero eso ayude.

Editar

Se me señaló que la pregunta no era sobre JPA, sino sobre spring-data-jdbc. Esto es correcto pero no cambia la respuesta ya que el mismo comportamiento está documentado en Spring Data JDBC-Reference Documentation .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda