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

205
Vistas
jpa mapeo de clave principal compuesta de uno a muchos

Tengo 2 tablas de la siguiente manera:

 TABLE_A ------- A_SIREN A_NDA TABLE_B ------- B_id B_NDA B_SIREN

El id de la tabla A es una COMPOSITE KEY COMPUESTA SIREN/NDA

Aquí está el código de las entidades.

clase clave

 @Embeddable public class SirenNdaKey implements Serializable { @Column(name = "A_SIREN") protected String siren; @Column(name = "A_NDA") protected String nda; // getters setters }

TABLA A

 public class EntityA{ @EmbeddedId private SirenNdaKey sirenNda; @OneToMany(fetch = FetchType.LAZY) @PrimaryKeyJoinColumns({ @PrimaryKeyJoinColumn(name = "A_SIREN", referencedColumnName = "B_SIREN"), @PrimaryKeyJoinColumn(name = "A_NDA", referencedColumnName = "B_NDA") }) private Set<EntityB> EntityBSet; ... }

TABLA B

 public class EntityB @Id private long id; @Column(name = "B_SIREN") private String siren; @Column(name = "B_NDA") private String nda; }

Hibernate genera 3 tablas: TABLE_A, TABLE_B y tabla de asociación que contienen A_NDA, A_SIREN, B_ID. ¿Cómo puedo hacer para generar solo 2 tablas?

Mi objectif es encontrar una lista de entidades B asociadas a la misma pareja SIREN/NDA de la entidad A ( entityA.getEntityBSet() ) sin necesidad de la tabla de asociación, porque mis tablas son proporcionadas por un lote externo.

 entityA = entityARepository.findOne(new SirenNdaKey("nda_test1", "siren_test1")); entityA.getEntityBSet() // this list is always empty
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Este es el código fuente correcto, debería usar @JoinColumns en lugar de @PrimaryKeyJoinColumns

 public class EntityA{ @EmbeddedId private SirenNdaKey sirenNda; @OneToMany(fetch = FetchType.LAZY) @JoinColumns({ @JoinColumn(name = "B_SIREN", referencedColumnName = "A_SIREN"), @JoinColumn(name = "B_NDA", referencedColumnName = "A_NDA") }) private Set<EntityB> EntityBSet; ... }
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