我有兩個實體,我想通過多列加入。這些列由兩個實體共享的@Embeddable
對象共享。在下面的示例中,Foo
可以只有一個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
「每個表中都重複了這些字段。
我的問題是,當我嘗試啓動休眠,我收到此錯誤:
org.hibernate.AnnotationException: referencedColumnNames(column_1, column_2, column_3, column_4) of Foo.bar referencing Bar not mapped to a single property
我已經試過這標誌着JoinColumns不是插入和更新,但沒有運氣。有沒有一種方法來表達這與Hibernate/JPA註釋?
如果您從「Foo」中刪除可嵌入的內容,該怎麼辦? – siebz0r