【发布时间】:2017-04-25 00:54:08
【问题描述】:
两个表如:
CREATE TABLE foo (
id INT PRIMARY KEY,
x TEXT
);
CREATE TABLE bar (
foo_id INT REFERENCES foo (id) ON DELETE CASCADE,
y TEXT,
z TEXT
);
...可以像这样映射:
@Table(name = "foo")
@SecondaryTable(name = "bar", pkJoinColumns = @PrimaryKeyJoinColumn(name = "foo_id", referencedColumnName = "id"))
class Foo {
@Id
int id;
@Embedded
@AttributeOverrides({
@AttributeOverride(name = "y", column = @Column(table = "bar")),
@AttributeOverride(name = "z", column = @Column(table = "bar"))
})
Bar bar;
}
@Embeddable
class Bar {
String y;
String z;
}
是否有一种不那么尴尬的方法来进行这种映射,或者只使用标准的 JPA 注释,或者使用特定于 Hibernate 的注释(并且不在可嵌入对象中引入父引用)?
将此与使用@ElementCollection 和@CollectionTable 引用@Embeddable 对象集合的难易程度进行比较。
【问题讨论】:
-
您不能简单地使用 @ElementCollection 映射它,但隐藏该实现细节,即不公开集合,而是提供操作集合的 set/getBar 方法吗?
-
这也行,但比上面的冗长注释更难看:-)