我第一次在项目中使用persist()方法。使用JPA我使用Hibernate作为提供者。这个案子非常简单。我有2张桌子
现在我为某个特定的公司提供了一些CP_Doc。我已成功创建实体(为createNativeQuery工作,为JPA创建)。我还提到了集合的cascade = CASCADE.ALL。
为了坚持,我写下面的代码。
Company company = new Company();
company.setGCompanyId(7);
for(/* Get all docs for a particular company having id = 7 */) {
CP_Doc cpDoc = new CP_Doc();
cpDoc.setChronicleId(/* some chronicle id from the loop */);
cpDoc.setCompany(company);
entityManager.persist(cpDoc);
}
表之间的关系是一家公司可以有很多cp_docs。所以CP_Doc表是所有者表。我试过从CP_Doc方面坚持下去。我是否也可以从公司实体方面坚持下去。请帮助专家:)
答案 0 :(得分:1)
如果我理解正确,您已经在数据库中拥有ID为7的公司,并尝试向该公司添加CPDoc。
在这种情况下,坚持公司是没有意义的,因为它已经存在。创建一家新公司也没有任何意义,因为它已经存在。您应该从数据库加载公司,并将公司附加到新的CPDocs(反之亦然):
Company company = entityManager.find(Company.class, 7);
for(...) {
CP_Doc cpDoc = new CP_Doc();
cpDoc.setChronicleId(...);
cpDoc.setCompany(company);
company.getCPDocs().add(cpDoc);
entityManager.persist(cpDoc);
}