删除父项ManyToOne注释时删除孤儿

Stu*_*ent 5 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
Run Code Online (Sandbox Code Playgroud)

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

Dra*_*vic 4

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

@Entity
public class Patient {

    @OneToMany(mappedBy = "patient", orphanRemoval = true)
    private Collection<Appointment> appointments;
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,orphanRemoval逻辑可以从患者应用到他们的预约,而且您还可以在 HQL 查询中从患者导航到预约。

请注意,该mappedBy属性告诉约会负责关联管理,因此您可以通过在 .xml 文件中定义的多对一关系中设置患者来继续将约会与患者关联起来Appointment