【发布时间】:2017-09-27 10:57:31
【问题描述】:
我有两个实体,相关如下
@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 注释,但它对我不起作用! 你能告诉我为什么吗? 我想保持这种单向关系,你能帮我吗?
【问题讨论】:
-
你试过
orphanRemoval标志吗? -
但 orphanRemoval 与 OneToMay 关系一起使用,在我的情况下,我使用的是 ManyToOne 关系
-
ManyToOne是一种合成关系,在数据库中该关系仅使用OneToMany关系建模。如果您想在删除 Patient 时删除 Appointments,那么您应该像您一样级联删除操作。 OrphanRemoval 意味着 JPA 将跟踪语法ManyToOne集合中的哪些约会,如果您从患者的集合中删除约会,JPA 将在事务提交时将其删除。这有一个(小)成本,因为 JPA 必须在加载 Patient 时跟踪哪些约会存在,并在提交期间进行差异..
标签: java mysql spring hibernate