我无法弄清楚如何为以下实体正确设置 JPA 持久性(使用 EclipseLink 和 transaction-type="RESOURCE_LOCAL"):
@Entity
public class User {
// snip various members
@ManyToMany
private List<Company> companies;
public void setCompanies(List<Company> companies) {
this.companies = companies;
}
}
@Entity
public class Company {
// snip various members
}
我要做的是为公司列表设置级联,这样,如果以前没有保留的新公司在列表中,它将自动与用户一起保留:
User newUser = new User();
Company newCompany = new Company();
List<Company> companies = new ArrayList<Company>();
companies.add(newCompany);
newUser.setCompanies(companies);
entityManager.persist(newUser);
通过在@ManyToMany 上设置cascadeType.PERSIST,这工作得很好。但是,如果公司列表中包含一个预先保留的公司,我会得到一个 MySQLIntegrityConstraintViolationException,因为它正在尝试使用相同的主键保留(插入)一个新公司:
User newUser = new User();
Company oldCompany = companyDAO.find(oldCompanyId);
List<Company> companies = new ArrayList<Company>();
companies.add(oldCompany);
newUser.setCompanies(companies);
entityManager.persist(newUser);
那么应该如何设置,以便新公司自动持久化,而现有公司只是简单地添加到用户-公司映射中呢?