我無法對下列項目正確搞清楚如何建立JPA的持久性(使用的EclipseLink和交易型=「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
}
我「M試圖做的是建立了企業名單級聯,這樣,如果一個新的公司,以前沒有堅持是在列表中,它會自動與用戶一起堅持:
User newUser = new User();
Company newCompany = new Company();
List<Company> companies = new ArrayList<Company>();
companies.add(newCompany);
newUser.setCompanies(companies);
entityManager.persist(newUser);
通過設置cascadeType.PERSIST @ManyToMany,這工作得很好。但是,如果公司的名單中包含一個公司,是previsouly堅持,我得到一個MySQLIntegrityConstraintViolationException,因爲它試圖堅持(INSERT)一個新的公司具有相同主鍵:
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 – RNJ
試過MERGE是的,但是然後新的公司不會自動持續。 – Rolf