java - 删除父 manyToOne 注释时删除孤儿

标签 java mysql spring hibernate

我有两个实体,相关如下

@Entity
@Table(name = "APPOINTMENT")
public class Appointment {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long codeAp;

    @ManyToOne(fetch = FetchType.EAGER)
,   @OnDelete(action = OnDeleteAction.CASCADE)
    @JoinColumn(name = "codeP")
    private Patient patient;

    //attributes
    //getters and setters
    //constructors



@Entity
@Table(name = "PATIENT")
public class Patient {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long codeP;

    //attributes
    //getters and setters
    //constructors

我正在使用 JpaRepository 删除方法。 数据库中的表 PATIENT 和 APPOINTMENT 之间存在约束, 当我删除 Patient 时,我想删除孤儿。 我添加了@OnDelete hibernate 注释,但它对我不起作用! 你能告诉我为什么吗? 我想保持这种单向关系,你能帮我吗?

最佳答案

如果您只想继续使用关联作为单向关联,您可以在字段中定义延迟加载的反面,而无需为其公开 getter 和 setter:

@Entity
public class Patient {

    @OneToMany(mappedBy = "patient", orphanRemoval = true)
    private Collection<Appointment> appointments;
}

通过这种方式,orphanRemoval 逻辑从患者应用到他们的约会,作为奖励,您可以在 HQL 查询中从患者导航到约会。

注意 mappedBy 属性,它告诉预约负责关联管理,因此您可以通过将患者设置为 中定义的多对一关系来继续将预约与患者相关联约会

关于java - 删除父 manyToOne 注释时删除孤儿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43695185/

相关文章:

c# - Mysql存储过程错误1418

php - 跨多个站点收集投票

java - json.simple.JSONObject 无法使用 AWS Lambda JAVA 转换为 java.lang.String

java - JFrame 和 setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE)

java - 在 Java EE 中将 http 重定向到 https

MySQL - 项目总和问题

spring - 在 Spring Boot 应用程序的生产环境中使用 Tomcat

java - 根据我的需要修改spring框架

spring - @RequestParam 可以用于非 GET 请求吗?

java - PowerMock + Robolectric + ActiveAndroid