我在这里搜索,但未找到任何类似的主题,因此我发布了一个新问题。
我正在使用现有数据库上的Hibernate。我们不允许更改表的结构和数据。该应用程序正在从数据库读取数据,并根据某种逻辑迁移到另一个数据存储。
现在的问题是关于复合PK映射。例如
表A具有复合PK。
Table A -------- a1 (pk) a2 (pk) a3 (pk) a4 (pk) foo bar ========
表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 ========
我尝试了几种方法,但都无济于事。谁能告诉一个有效的Hibernate映射解决方案?注释样式更好。
在B的pk类中将A的实体对象设置为@ManyToOne。
所以如果你有
Class A Class APK - A's Primary Key Class B Class BPK - B's primary Key.
BPK将包含A为属性
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; } }
从文档中
@Embeddable继承其所属实体的访问类型,除非使用了Hibernate特定的注释@AccessType。使用@JoinColumns元素在关联上定义复合外键(如果不使用默认敏感值),该元素基本上是@JoinColumn的数组。显式表示referencedColumnNames被认为是一种好习惯。否则,Hibernate将假定您使用与主键声明中相同的列顺序。