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 - Fatal编程技术网

Java JPA:相关记录不会被删除

Java JPA:相关记录不会被删除,java,jpa,Java,Jpa,我对数据库设计有问题 有一个实体用户 public class User implements UserDetails, Serializable { // ... @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) @JoinColumn(name = "MANAGER_ID") private Manager manager; // ... } 有一个相关的管理者实体与用

我对数据库设计有问题

有一个实体用户

public class User implements UserDetails, Serializable {

    // ...

    @OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "MANAGER_ID")
    private Manager manager;

    // ...

}
有一个相关的管理者实体与用户实体关联

public class Manager {

    // ...

    @OneToMany(mappedBy = "manager", orphanRemoval = true)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<ExpertAndRequest> requests;

    @OneToOne(mappedBy = "manager", orphanRemoval = true)
    private User user;


    @OneToMany(mappedBy = "manager")
    private List<ParticipantRequest> participantRequests;


    // ...

}
public class ExpertAndRequest implements Serializable {

    // ...

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JoinColumn(name = "managerId", updatable = false, insertable = false, referencedColumnName = "id")
    private Manager manager;


    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "requestId", updatable = false, insertable = false, referencedColumnName = "id")
    private ParticipantRequest request;

    // ...

}


public class ParticipantRequest {

    // ...

    @OneToMany(mappedBy = "request", cascade = CascadeType.ALL)
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<ExpertAndRequest> experts;

    @ManyToOne
    @JoinColumn(name = "manager_id")
    private Manager manager;

    // ...

}
我希望使用右侧的管理器和相关的用户删除ExpertAndRequest行。但这并没有发生,出现了一个错误

org.hibernate.TransientPropertyValueException: object references an unsaved transient instance - save the transient instance before flushing : my.package.name.model.Manager.user -> my.package.name.model.User
我做错了什么?谢谢


更新这是我删除之前所做的全部操作。除了搬家什么都没有

public ManagerApiResult deleteManager(@RequestParam(name = "id") Long id) {
    if(!this.isUserManager()) {
        return null;
    }

    ManagerApiResult res = new ManagerApiResult();

    Manager manager = this.managerRepository.findOne(id);

    if(manager == null) {
        res.errors.add(String.format("Manager id \"%s\" do not exist", id));
        return res;
    }
    this.managerRepository.delete(manager);
    this.managerRepository.flush();
    return res;
}

例外是自我解释的


在实体图的某个地方(管理者的用户),您有一个
用户
的实例,该实例在
管理者

之前的删除操作中未被保存?您是否在删除之前提交了保存实体的事务?@FiloménaPetržlénováno,我不是在事务中这样做的。而repository impl?@antoniosss,您是什么意思?是否要查看存储库代码?这是否与数据库设计有关?必须首先持久化/获取用户,或在删除之前从管理器中删除用户。我是否可以确保在删除管理器时,该用户会自动删除?我必须为此做些什么?持久化或获取。
public ManagerApiResult deleteManager(@RequestParam(name = "id") Long id) {
    if(!this.isUserManager()) {
        return null;
    }

    ManagerApiResult res = new ManagerApiResult();

    Manager manager = this.managerRepository.findOne(id);

    if(manager == null) {
        res.errors.add(String.format("Manager id \"%s\" do not exist", id));
        return res;
    }
    this.managerRepository.delete(manager);
    this.managerRepository.flush();
    return res;
}