jpa @OneToMany结合 @JoinTable怎么只删除中间表
时间: 2023-07-10 15:06:38 浏览: 156
在使用 JPA 的 @OneToMany 和 @JoinTable 注解时,如果只想删除中间表的记录而不删除关联的实体,则可以使用 orphanRemoval 属性。
例如:
```java
@Entity
public class Parent {
@OneToMany(orphanRemoval = true)
@JoinTable(name = "parent_child",
joinColumns = @JoinColumn(name = "parent_id"),
inverseJoinColumns = @JoinColumn(name = "child_id"))
private List<Child> children = new ArrayList<>();
}
@Entity
public class Child {
// ...
}
```
在上面的例子中,设置了 orphanRemoval 属性为 true,表示当从 Parent 实体中移除 Child 实体时,如果该 Child 实体没有与其他任何 Parent 实体关联,则会自动删除该 Child 实体。
如果你想删除中间表记录时,同时也删除关联的实体,则需要在实体定义中使用 CascadeType.REMOVE 属性,如下所示:
```java
@Entity
public class Parent {
@OneToMany(mappedBy = "parent", cascade = CascadeType.REMOVE, orphanRemoval = true)
private List<Child> children = new ArrayList<>();
}
@Entity
public class Child {
@ManyToOne
@JoinColumn(name = "parent_id")
private Parent parent;
// ...
}
```
在上面的例子中,设置了 CascadeType.REMOVE 属性,表示当删除 Parent 实体时,也会同时删除它所关联的 Child 实体。同时,设置了 orphanRemoval 属性为 true,表示当从 Parent 实体中移除 Child 实体时,如果该 Child 实体没有与其他任何 Parent 实体关联,则会自动删除该 Child 实体。
阅读全文