0

我第一次在项目中使用 persist() 方法。使用 JPA,我使用 Hibernate 作为提供程序。这个案子很简单。我有 2 张桌子

  1. 公司 - Company_id(PK,一个序列),G_Company_id(也是唯一的)
  2. CP_Doc - Chronicle_id (PK), Company_id (FK 到上面的 Company_id))

现在我有一些特定公司的 CP_Docs。我已成功创建实体(为 JPA 的 createNativeQuery、createQuery 工作)。我还提到了集合的 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 方面坚持下去。我也可以从公司实体方面坚持下去吗?请帮助专家:)

4

1 回答 1

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);
}
于 2012-06-08T07:55:48.307 回答