Daw*_*wid 5 hibernate cascade one-to-one jpa-2.0
我正在使用JPA2和Hibernate实现.
我有这样的简单映射:
@Entity
class Topic {
@Id
@GeneratedValue(strategy = IDENTITY)
int id;
@OneToOne(cascade = ALL)
@JoinColumn(name = "id_poll")
private Poll poll;
}
@Entity
class Poll {
@Id
@GeneratedValue(strategy = IDENTITY)
int id;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我删除一个也在Topic中的Poll对象时,我收到一个错误.
java.sql.SQLException:完整性约束违规FKCC42D924982D3F4B表:语句中的TOPICS [从民意调查中删除id =?]
我理解这是因为如果Poll记录在另一个表中有引用,我就无法删除它.我怎么解决这个问题?我是否必须在主题表中手动设置poll = null或者是否有更好的解决方案?
这是预期的行为:
双向关系的一个常见问题是应用程序更新了关系的一方,但另一方没有更新,并且变得不同步.在JPA中,与Java一样,应用程序或对象模型负责维护关系.
处理此问题的正确位置是@PreRemove回调:
@Entity
class Poll {
...
@PreRemove
private void preRemove() {
Poll poll = topic.getPoll();
topic.setPoll( null );
}
}
Run Code Online (Sandbox Code Playgroud)
另请参阅:让JPA/Hibernate复制"ON DELETE SET NULL"功能
| 归档时间: |
|
| 查看次数: |
3649 次 |
| 最近记录: |