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

时间:2014-01-08 16:48:22

标签: java hibernate jpa

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()自动删除关联表中的记录。

0 个答案:

没有答案