0

初めてプロジェクトで persist() メソッドを使用しています。JPA では、プロバイダーとして Hibernate を使用しています。ケースは至ってシンプル。私は2つのテーブルを持っています

  1. Company - Company_id (PK、シーケンス)、G_Company_id (これも一意)
  2. CP_Doc - Chronicle_id (PK)、Company_id (FK から上記の Company_id))

現在、ある特定の会社の CP_Docs があります。エンティティの作成に成功しました(createNativeQuery、JPAの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);
    }

テーブル間の関係は、1 つの会社が多くの cp_doc を持つことができるということです。したがって、CP_Doc テーブルは所有者テーブルです。CP_Doc 側から永続化してみました。Company Entity側からも永続化できますか。親切に専門家を助けてください:)

4

1 に答える 1

1

私が正しく理解していれば、データベースにID 7の会社がすでにあり、この会社にCPDocを追加してみてください。

この場合、会社はすでに存在しているため、会社を存続させることはほとんど意味がありません。また、すでに存在しているので、新しい会社を作ることも意味がありません。代わりに、データベースから会社をロードし、会社を新しいCPDocにアタッチする必要があります(またはその逆)。

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 に答える