java – JPA不生成“on delete set null”FK限制

前端之家收集整理的这篇文章主要介绍了java – JPA不生成“on delete set null”FK限制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有两个相关的条款JPA注释.报警和状态.一个报警可以有一个状态.

我需要的是能够删除一个状态,并将一个空值“传播”到已被删除的状态中的警报.

也就是说,我需要将外键定义为“on delete set null”.

  1. @Entity
  2. public class Alarm {
  3. @Id
  4. @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="sequence")
  5. @SequenceGenerator(name="sequence",sequenceName="alarm_pk_seq")
  6. private Integer id;
  7.  
  8. @OneToOne(cascade=CascadeType.ALL)
  9. @JoinColumn(name="idStatus")
  10. private Status status;
  11.  
  12. // get/set
  13. }
  14.  
  15. @Entity
  16. public class Status {
  17. @Id
  18. @Column(name="idStatus")
  19. private Integer id;
  20.  
  21. private String description;
  22.  
  23. // get/set
  24. }

例:

之前:

  1. STATUS
  2. id description
  3. 1 new
  4. 2 assigned
  5. 3 closed
  6.  
  7. ALARMS
  8. id status
  9. 1 1
  10. 2 2
  11. 3 2

之后(删除ID = 2的状态)

  1. STATUS
  2. id description
  3. 1 new
  4. 3 closed
  5.  
  6. ALARMS
  7. id status
  8. 1 1
  9. 2 NULL
  10. 3 NULL

我使用Hibernate和Postgresql,从源代码自动生成数据库.我尝试过每个可能的CascadeType,没有成功.

代码中有什么问题吗?有可能用JPA吗?

解决方法

只需添加使用Hibernate注释:
  1. @OnDelete(action=OnDeleteAction.CASCADE)

生成外键为“ON UPDATE NO ACTION ON DELETE CASCADE”;“

但是没有动作= OnDeleteAction.SET_NULL

此外,如果可能,我不喜欢将代码绑定到Hibernate(但是如果它可以工作,我可以使用它).

这个thread讨论它.我不敢相信JPA(或Hibernate扩展)中没有一个简单的方法生成外键.

猜你在找的Java相关文章