Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.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_Hibernate_Jpa - Fatal编程技术网

Java JPA使用附加列删除多个表中的行

Java JPA使用附加列删除多个表中的行,java,hibernate,jpa,Java,Hibernate,Jpa,我在项目和客户员工之间有一种多对多的关系。我尝试在JoinTable ProjectClientEmployee中使用复合主键,但没有成功 因此,我仅使用一个自动生成的id创建了关系 加入班级 @Entity @Table(name="project_clientemployee") public class ProjectClientEmployee extends GenericModel{ @Id @GeneratedValue(strategy=GenerationType.I

我在项目和客户员工之间有一种多对多的关系。我尝试在JoinTable ProjectClientEmployee中使用复合主键,但没有成功

因此,我仅使用一个自动生成的id创建了关系

加入班级

@Entity
@Table(name="project_clientemployee")
public class ProjectClientEmployee extends GenericModel{

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    public Integer id;

    @ManyToOne
    @PrimaryKeyJoinColumn(name="projectId", referencedColumnName="id")
    public Project project;

    @ManyToOne
    @PrimaryKeyJoinColumn(name="clientEmployeeId", referencedColumnName="id")
    public ClientEmployee clientEmployee;

    public String role; // additional column

    ...
}
@Entity
public class Project extends GenericModel {

    @OneToMany(mappedBy="project", cascade=CascadeType.ALL)
    public List<ProjectClientEmployee> clientEmployees = new ArrayList();

    ...
}
@Entity
public class ClientEmployee extends Person {

    @OneToMany(mappedBy="clientEmployee", cascade=CascadeType.ALL)
    public List<ProjectClientEmployee> projects = new ArrayList();

    ...
}
项目类

@Entity
@Table(name="project_clientemployee")
public class ProjectClientEmployee extends GenericModel{

    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    public Integer id;

    @ManyToOne
    @PrimaryKeyJoinColumn(name="projectId", referencedColumnName="id")
    public Project project;

    @ManyToOne
    @PrimaryKeyJoinColumn(name="clientEmployeeId", referencedColumnName="id")
    public ClientEmployee clientEmployee;

    public String role; // additional column

    ...
}
@Entity
public class Project extends GenericModel {

    @OneToMany(mappedBy="project", cascade=CascadeType.ALL)
    public List<ProjectClientEmployee> clientEmployees = new ArrayList();

    ...
}
@Entity
public class ClientEmployee extends Person {

    @OneToMany(mappedBy="clientEmployee", cascade=CascadeType.ALL)
    public List<ProjectClientEmployee> projects = new ArrayList();

    ...
}
但移除并不起作用。要删除,我只需创建一个新列表并填充新员工,然后将项目列表设置为该列表

project.clientEmployees = new ArrayList<>();
for(ClientEmployee clientEmployee : newClientEmployees){
   project.addClientEmployee(clientEmployee, "Project Lead");
}
project.clientEmployees=new ArrayList();
for(客户员工客户员工:新客户员工){
添加客户员工(客户员工,“项目负责人”);
}
但这并不是首先清空列表。它只是在旧列表的顶部添加。(即不会删除以前的记录。)


问题:为什么不
project.clientEmployees=new ArrayList()
然后
project.save()
自动删除关联表中的记录。

要从数据库中删除实体,必须使用
em.remove()
明确删除它。就这么简单。@JBNizet-Tnx。但是JPA不应该根据新列表自动删除或添加到关联表中吗?我会通过
project.clientEmployees=newarraylist()来思考和保存项目时,应删除所有关联。我为我的另一个@OneToMany关系这样做,它工作了……我想可能是关联表有两个外键,所以不会自动执行它?如果删除为真,它在OneToMany上工作。在这种情况下,您应该删除实体。好的,使用
JPA.em.remove()
works。我在用Play!特定于框架的
.delete()
,它不起作用。