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 emptyEste 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; ... }