Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何仅删除JPA中的父实体_Java_Jpa_Relationship_Orphan - Fatal编程技术网

Java 如何仅删除JPA中的父实体

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

我有一个人对象。Person有一个manager属性,该属性也是Person类型

@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。另外,完整异常也会有所帮助,而导致异常的代码。