Tengo dos entidades a las que me gustaría unirme a través de varias columnas. Estas columnas se comparten con un objeto @Embeddable
que comparten ambas entidades. En el ejemplo siguiente, Foo
puede tener solo un Bar
pero Bar
puede tener varios Foo
s (donde AnEmbeddableObject
es una clave única para Bar
). Aquí está un ejemplo:Columna múltiple Unir en Hibernate/JPA Anotaciones
@Entity
@Table(name = "foo")
public class Foo {
@Id
@Column(name = "id")
@GeneratedValue(generator = "seqGen")
@SequenceGenerator(name = "seqGen", sequenceName = "FOO_ID_SEQ", allocationSize = 1)
private Long id;
@Embedded
private AnEmbeddableObject anEmbeddableObject;
@ManyToOne(targetEntity = Bar.class, fetch = FetchType.LAZY)
@JoinColumns({
@JoinColumn(name = "column_1", referencedColumnName = "column_1"),
@JoinColumn(name = "column_2", referencedColumnName = "column_2"),
@JoinColumn(name = "column_3", referencedColumnName = "column_3"),
@JoinColumn(name = "column_4", referencedColumnName = "column_4")
})
private Bar bar;
// ... rest of class
}
Y la clase de barras:
@Entity
@Table(name = "bar")
public class Bar {
@Id
@Column(name = "id")
@GeneratedValue(generator = "seqGen")
@SequenceGenerator(name = "seqGen", sequenceName = "BAR_ID_SEQ", allocationSize = 1)
private Long id;
@Embedded
private AnEmbeddableObject anEmbeddableObject;
// ... rest of class
}
Finalmente el AnEmbeddedObject
clase:
@Embeddable
public class AnEmbeddedObject {
@Column(name = "column_1")
private Long column1;
@Column(name = "column_2")
private Long column2;
@Column(name = "column_3")
private Long column3;
@Column(name = "column_4")
private Long column4;
// ... rest of class
}
Obviamente el esquema es poco normalizada, es una restricción que AnEmbeddedObject
' s campos se repiten en cada tabla.
El problema que tengo es que recibo este error cuando intento para poner en marcha Hibernate:
org.hibernate.AnnotationException: referencedColumnNames(column_1, column_2, column_3, column_4) of Foo.bar referencing Bar not mapped to a single property
He intentado marcar los JoinColumns no son insertables y actualizable, pero sin suerte. ¿Hay alguna manera de expresar esto con las anotaciones de Hibernate/JPA?
¿Qué sucede si elimina la incrustación de 'Foo'? – siebz0r