Java 如何仅删除JPA中的父实体
我有一个人对象。Person有一个manager属性,该属性也是Person类型Java 如何仅删除JPA中的父实体,java,jpa,relationship,orphan,Java,Jpa,Relationship,Orphan,我有一个人对象。Person有一个manager属性,该属性也是Person类型 @OneToOne(optional = true, cascade = { CascadeType.ALL }) private Person manager; 假设约翰是经理,鲍勃是员工。当我试图删除约翰时,它失败了,因为鲍勃成了孤儿(没有经理)。在我的用例中应该允许这样做。但将这种关系标记为“可选”并没有帮助。而Cascade在这里似乎没有任何意义 我想这在JPA是可能的。有什么帮助吗 @Entity pu
@OneToOne(optional = true, cascade = { CascadeType.ALL })
private Person 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;
@实体
公共阶层人士{
@身份证
私有字符串id;
私有字符串名称;
私人整数年龄;
私人地址;
@JoinColumn(name=“manager\u id”,nullable=true,insertable=true,updateable=true)
@OneToOne(可选=true,级联={CascadeType.ALL})
私人经理;
@OneToMany(mappedBy=“manager”,cascade={CascadeType.ALL})
公众募捐报告人;
@OneToOne
,因为很多员工都有同一位经理@OneToOne
,则通过在Person
Java类中添加属性,使关系具有双向性:
@OneToOne(mappedBy="manager", cascade = { CascadeType.ALL })
private Person employee;
在尝试删除John之前,您应该将
null
设置为Bob的经理。此外,@Andrei是对的,您应该将其映射为双向@manytone
关系(尽管如果您知道所有以John为经理的人,您的代码将起作用).我在删除子实体之前删除了父实体。这不是理想的解决方案,但对我来说很有效
我还尝试了双向关系(通过添加Person类型的@ManyToOne reportees属性),并使用@JoinColumn(也标记为nullable=true)将关系标记为“可选”。但没有任何效果。数据库中的
manager\u id
列是否配置为not null?“id”个人字段应该是经理id,否则没有显式字段。通过这些映射,manager\u id
必须存在于数据库中。它将管理者的id保存为“当前”人员的id。如何将其标记为空(我认为可选)?我实际上是在使用JPA bean来创建DB模式,而不是其他方式。可选
应该这样做,我只是想知道它在数据库中是否真的不为null。另外,完整异常也会有所帮助,而导致异常的代码。