我有简单的OneToOne关系:
数据< - > TherapyResult
我想表达以下限制 与JPA。
使用JPA第一个约束非常简单,因为我可以添加 CascadingType.REMOVE
@OneToOne(cascade = { CascadeType.REMOVE, CascadeType.REFRESH })
private TherapyResult therapyResult;
对于第二个约束,我想添加类似
的内容@JoinColumn(columnDefinition = "DATA_ID BIGINT CONSTRAINT THERAPYRESULTDTAID FOREIGN KEY (DATA_ID) REFERENCES DATA (ID) ON DELETE SET NULL")
然而,这不起作用。 OpenJPA似乎有类似的东西,但我想使用JPA 2.0和EclipseLink。 OpenJPA ForeignKey
另一个解决方案是使用 @PreRemove described here,它可以工作,但对我来说看起来有点“非最佳做法”。不过只是一种感觉。
我的设置是: Eclipse 3.7.1 EclipseLink 2.3 Apache Derby 10.8.3和/或HSQLDB
任何帮助表示赞赏, 缪奇
答案 0 :(得分:2)
您不能使用纯JPA来指定外键...该规范不包括该功能。 JDO是唯一能够定义FK的标准。您必须使用实现细节,或者自己定义模式并让JPA impl在其上运行。
答案 1 :(得分:2)
如果您有从Data to TherapyResult的外键,而Data是该关联的所有者,那么
therapyResult
字段设置为null,然后删除TherapyResult即可获得所需内容。另一种选择是将orphanRemoval设置为true,在这种情况下将therapyResult
字段设置为null就足以将其从数据库中删除如果你有一个从TherapyResult到Data的外键,而TherapyResult是该协会的所有者,那么
Data.therapyResult
字段上将cascade设置为REMOVE,则TherapyResult.data
字段上的REMOVE