假设f1和F2唯一标识A并存在于APK中,则可以通过几种方式使用JPA 2.0的派生ID。最容易显示的是:
@Entity@IdClass(BPK.class)public class B { @ID String f5; @ID String f6; @ID @ManyToOne(fetch=FetchType.EAGER) @JoinColumns({ @JoinColumn(name="f1", referencedColumnName="f1", nullable=false), @JoinColumn(name="f2", referencedColumnName="f2", nullable=false) }) A a;}public class BPK { String f5; String f6; APK a;}
这里的关键点是B对A的引用控制了外键字段f1和f2,并且A的主键在B的主键中使用-
与关系名称相同。映射它的另一种方法是将B的PK设置为一个嵌入式ID,但是嵌入式ID仍然不能具有引用映射,因此它可能看起来像:
@Entity@IdClass(BPK.class)public class B { @EmbeddedId BPK pk; @MapsId("apk") @ManyToOne(fetch=FetchType.EAGER) @JoinColumns({ @JoinColumn(name="f1", referencedColumnName="f1", nullable=false), @JoinColumn(name="f2", referencedColumnName="f2", nullable=false) }) A a;}@Embeddablepublic class BPK { String f5; String f6; APK apk;}
请注意mapsId-
这告诉JPA嵌入式’apk’引用中的列使用从A提取的引用映射中的外键字段。JPA将从引用映射中为您填充外键,如果您正在使用排序,则这一点很重要。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)