两个表如:
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 特定的注释(并且不在可嵌入对象中引入父引用)?
与此相比,收集@Embeddable
可以使用对象来引用@ElementCollection
and @CollectionTable
.
很抱歉回答晚了,但这个问题让我很感兴趣,所以我想我会尝试一下。
一个更优雅的解决方案是使内容bar
使用 Entity 而不是 Embeddable,并使用 OneToOne 关系而不是 Embedded。您还需要记住使用@PrimaryKeyJoinColumn
代替@JoinColumn
:
@Entity
@Table(name = "bar")
class Bar {
@Id
int fooId;
String y;
String z;
}
...
@Entity
@Table(name = "foo")
class Foo {
@Id
int id;
@OneToOne
@PrimaryKeyJoinColumn
Bar bar;
}
最大的优点就是Foo
不再需要了解内容Bar
。根据您的数据库的命名策略,您可能还需要指定以下列的名称fooId
in Bar
与类似的东西@Column(name = "foo_id")
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)