複数の列を介して結合したい2つのエンティティがあります。これらの列は、両方のエンティティによって共有される@Embeddable
オブジェクトによって共有されます。以下の例では、Foo
は1つだけBar
を持つことができますが、Bar
は複数のFoo
(AnEmbeddableObject
はBar
のユニークなキーです)を持つことができます。次に例を示します。Hibernate/JPAアノテーションでの複数列結合
@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
}
、バークラス:
@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
}
最後にAnEmbeddedObject
クラス:
@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
}
明らかスキーマはそれはAnEmbeddedObject
制限され、不十分正規化されます各フィールドでフィールドが繰り返されます。私はJoinColumnsをマーキングしようとしている
org.hibernate.AnnotationException: referencedColumnNames(column_1, column_2, column_3, column_4) of Foo.bar referencing Bar not mapped to a single property
に挿入し、更新可能ではありませんが、運と:
私が持っている問題は、私は私が休止状態を起動しようとすると、このエラーが表示されるということです。これをHibernate/JPAアノテーションで表現する方法はありますか?
「Foo」から埋め込みファイルを削除するとどうなりますか? – siebz0r