JPA2.0外键约束
我有简单的一对一关系:JPA2.0外键约束,jpa,jpa-2.0,constraints,foreign-key-relationship,Jpa,Jpa 2.0,Constraints,Foreign Key Relationship,我有简单的一对一关系: 数据治疗结果 我想表达以下限制 与JPA合作 如果数据实体被删除,那么相关的治疗结果也应该被删除 如果删除了治疗结果实体,则相关数据实体应保留在数据库中 JPA的第一个约束非常简单,因为我可以添加CascadingType.REMOVE 对于第二个约束,我想添加如下内容 @JoinColumn(columnDefinition = "DATA_ID BIGINT CONSTRAINT THERAPYRESULTDTAID FOREIGN KEY (DATA_ID) REF
数据治疗结果 我想表达以下限制 与JPA合作
@JoinColumn(columnDefinition = "DATA_ID BIGINT CONSTRAINT THERAPYRESULTDTAID FOREIGN KEY (DATA_ID) REFERENCES DATA (ID) ON DELETE SET NULL")
然而,这不起作用。OpenJPA似乎也有类似的功能,但我想使用JPA2.0和EclipseLink
另一个解决方案是使用@PreRemove,它可以工作,但在我看来有点“非最佳实践”。然而,这只是一种感觉
我的设置是:
Eclipse 3.7.1
日食2.3
Apache Derby 10.8.3和/或HSQLDB
感谢您的帮助,
Muki不能使用纯JPA指定外键。。。该规范不包括该能力。JDO是唯一能够定义FKs的标准。您必须使用实现细节,或者自己定义模式并让JPA impl在其上运行。您不能使用纯JPA来指定外键。。。该规范不包括该能力。JDO是唯一能够定义FKs的标准。您必须使用实现细节,或者自己定义模式并让JPA impl在其上运行。如果您有一个从Data到TherapyResult的外键,并且Data是关联的所有者,那么
- 如果cascade设置为REMOVE,删除数据将自动删除TherapyResult
- 您只需将
字段设置为null,然后删除therapyResult即可获得所需的结果。另一个选项是将OliverRemoving设置为true,在这种情况下,将therapyResult
字段设置为null就足以将其从数据库中删除therapyResult
如果您拥有从TherapyResult到Data的外键,并且TherapyResult是关联的所有者,则
- 如果在
字段中将cascade设置为REMOVE,则删除数据将自动删除TherapyResultData.TherapyResult
- 如果在
字段中未将级联设置为删除,则删除TherapyResult将在数据库中保留数据TherapyResult.Data
- 如果cascade设置为REMOVE,删除数据将自动删除TherapyResult
- 您只需将
字段设置为null,然后删除therapyResult即可获得所需的结果。另一个选项是将OliverRemoving设置为true,在这种情况下,将therapyResult
字段设置为null就足以将其从数据库中删除therapyResult
如果您拥有从TherapyResult到Data的外键,并且TherapyResult是关联的所有者,则
- 如果在
字段中将cascade设置为REMOVE,则删除数据将自动删除TherapyResultData.TherapyResult
- 如果在
字段中未将级联设置为删除,则删除TherapyResult将在数据库中保留数据TherapyResult.Data
@JoinColumn(columnDefinition = "DATA_ID BIGINT CONSTRAINT THERAPYRESULTDTAID FOREIGN KEY (DATA_ID) REFERENCES DATA (ID) ON DELETE SET NULL")