Project和ClientEmployee之间有很多关系。我尝试在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();
...
}
现在,我已成功创建关联(在连接表中创建行),但我无法删除这些关系。
将员工添加到项目中这有效..
public void addClientEmployee(ClientEmployee clientEmployee, String role){
ProjectClientEmployee clientEmployeeAssoc = new ProjectClientEmployee();
clientEmployeeAssoc.project = this;
clientEmployeeAssoc.clientEmployee = clientEmployee;
clientEmployeeAssoc.role = role;
this.clientEmployees.add(clientEmployeeAssoc);
clientEmployee.projects.add(clientEmployeeAssoc);
}
但删除不起作用。要删除我只需创建一个新列表并填充新的Employees,然后将项目列表设置为该列表。
project.clientEmployees = new ArrayList<>();
for(ClientEmployee clientEmployee : newClientEmployees){
project.addClientEmployee(clientEmployee, "Project Lead");
}
但这不会先清空列表。它只是添加在旧列表之上。 (即它不会删除以前的记录。)
问题:为什么不是project.clientEmployees = new ArrayList<>();
然后project.save()
自动删除关联表中的记录。