【发布时间】:2012-09-11 17:41:17
【问题描述】:
我无法弄清楚如何为以下实体正确设置 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);
那么应该如何设置,以便自动保留新公司,而现有公司只是简单地添加到用户-公司映射中?
【问题讨论】:
-
你试过CascadeType.MERGE
-
已尝试 MERGE 是的,但新公司不会自动持久化。
标签: java jpa many-to-many persistence eclipselink