Ken*_*ent 8 java hibernate hibernate-annotations
我在那里搜索,没有找到任何类似的话题,所以我发布了一个新问题.
我正在使用现有数据库上的Hibernate.我们不允许更改表结构和数据.应用程序正在从数据库中读取数据,并根据某些逻辑迁移到另一个数据存储区.
现在问题是关于复合PK映射.例如
表A具有复合PK.
Table A
--------
a1 (pk)
a2 (pk)
a3 (pk)
a4 (pk)
foo
bar
========
Run Code Online (Sandbox Code Playgroud)
表B也具有复合PK,并且该复合PK的一部分是A的PK,这里也用作FK.
Table B
--------
a1 (fk,pk)
a2 (fk,pk)
a3 (fk,pk)
a4 (fk,pk)
b1 (pk)
b2 (pk)
b3 (pk)
foo
bar
========
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法,但没有一种方法可行.谁能告诉一个有效的Hibernate映射解决方案?注释风格更好.
Vin*_*ian 10
在B的pk类中将A的实体对象设置为@ManyToOne.
所以,如果你有
Class A
Class APK - A's Primary Key
Class B
Class BPK - B's primary Key.
Run Code Online (Sandbox Code Playgroud)
BPK将包含A作为属性
@Embeddable
public class BPK implements serializable {
....
private A a;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumns ({
@JoinColumn(name="...", referencedColumnName = "..."),
@JoinColumn(name="...", referencedColumnName = "..."),
...
})
public getA() {
return this.a;
}
}
Run Code Online (Sandbox Code Playgroud)
从文档中
@Embeddable继承其拥有实体的访问类型,除非使用Hibernate特定注释@AccessType.复合外键(如果不使用默认敏感值)是在使用@JoinColumns元素的关联上定义的,该元素基本上是@JoinColumn的数组.明确表达referencedColumnNames是一种很好的做法.否则,Hibernate将假设您使用与主键声明中相同的列顺序.
| 归档时间: |
|
| 查看次数: |
21264 次 |
| 最近记录: |