微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我有两个相关的条款JPA注释.报警和状态.一个报警可以有一个状态.

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

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

@Entity
public class Alarm {
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="sequence")
    @SequenceGenerator(name="sequence",sequenceName="alarm_pk_seq")
    private Integer id;

    @OnetoOne(cascade=CascadeType.ALL)
    @JoinColumn(name="idStatus")
    private Status status;

    // get/set
}

@Entity
public class Status {
    @Id
    @Column(name="idStatus")
    private Integer id;

    private String description;

    // get/set
}

例:

之前:

STATUS
id  description
1   new
2   assigned
3   closed

ALARMS
id  status
1   1
2   2
3   2

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

STATUS
id  description
1   new
3   closed

ALARMS
id  status
1   1
2   NULL
3   NULL

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

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

解决方法

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

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

但是没有动作= OnDeleteAction.SET_NULL

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

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

原文地址:https://www.jb51.cc/java/122793.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐