如何在JPA中只删除父实体



我有一个Person对象。Person有一个同样属于Person类型的manager属性。

@OneToOne(optional = true, cascade = { CascadeType.ALL })
private Person manager;

假设约翰是经理,鲍勃是雇员。当我试图删除John时,它失败了,因为Bob变成了孤儿(没有Manager)。在我的用例中应该允许这样做。但将这种关系标记为"可选"并没有帮助。Cascade在这里似乎没有任何意义。

我认为JPA有可能做到这一点。有什么帮助吗?

@Entity
public class Person {
@Id
private String id;
private String name;
private Integer age;
private Address address;
@JoinColumn(name = "manager_id", nullable = true, insertable = true, updatable = true)
@OneToOne(optional = true, cascade = { CascadeType.ALL })
private Person manager;
@OneToMany(mappedBy = "manager", cascade = { CascadeType.ALL })
public Collection<Person> reportees;

在尝试删除John之前,您应该将null设置为Bob的经理。此外,@Andrei是对的,您应该将其映射为双向@ManyToOne关系(尽管如果您认识所有以John为经理的人,则您的代码会起作用)。

  1. 我怀疑这种关系是@OneToOne,因为有很多员工都有同一个经理
  2. 如果您坚持它是@OneToOne,那么通过在Person Java类中添加属性:,使关系双向

    @OneToOne(mappedBy="manager", cascade = { CascadeType.ALL }) 
    private Person employee;
    

在删除子实体之前,我删除了父实体。不是理想的解决方案,但对我有效。

我还尝试了双向关系(通过添加Person类型的@ManyToOne reportees属性),并使用@JoinColumn将关系标记为"可选",还标记为nullable=true。但什么都没用。

相关内容

  • 没有找到相关文章

最新更新