Java JPA使用附加列删除多个表中的行
我在项目和客户员工之间有一种多对多的关系。我尝试在JoinTable ProjectClientEmployee中使用复合主键,但没有成功 因此,我仅使用一个自动生成的id创建了关系 加入班级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
@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()
,它不起作用。