0

JPAでいくつかの単純なテーブルを構築しようとしていますが、それらを機能させるのに問題があります。lookupgroupkeyword、およびgroupkwの合計 4 つのテーブルがあります。

ルックアップテーブルにはId フィールドがあります。このlookup.idフィールドは、他のテーブルで外部キーとして使用されます。

テーブルグループでは、id列が主キーとしてlookupid列に結合されます。また、キーワードテーブルでは、id列が主キーとしてlookupid列に結合されます。

最後のテーブルはgroupkwテーブルで、 kwidgroupidlookupidの3 つの列があります。kwidとlookupidは、表Keywordの列 idlookupidにマップされます。groupidlookupidは、テーブルgroupの列 "id" と "lookupid" にマップされます。

groupkeywordについては、それらを表す注釈付きの Java クラスを作成しました。単体テストによると、正常に動作しています。しかし、テーブルgroupkwの場合、正しい注釈クラスを取得できません。

テーブルgroupkwのコードをいくつか書きました。

@NotNull
@ManyToOne
@JoinColumns({
@JoinColumn(name="kwid", referencedColumnName = "id", nullable = false),
@JoinColumn(name="lookupid", referencedColumnName = "lookupid", nullable = false)
})
public Keyword getKeyword() {
  return keyword;
}

@NotNull
@ManyToOne
@JoinColumns({
@JoinColumn(name="groupid", referencedColumnName = "id", nullable = false),
@JoinColumn(name="lookupid", referencedColumnName = "lookupid",
nullable = false, insertable=false, updatable=false)
})
public Group getgroup() {
  return group;
}

しかし、動作していないようです。EntityManagerFactory はgroupkwテーブルを作成できません。これがこのテーブルを実装する正しい方法なのか、それとも別の方法があるのか​​教えてください。

4

1 に答える 1

0

列の場合のように、列を 2 回マップすることはできませんlookupid。あなたはそれを必要以上に難しくしています。

私の理解が正しければ、次の関連性があります。

  • ルックアップ - OneToMany - グループ
  • ルックアップ - OneToMany - キーワード
  • グループ - ManyToMany - キーワード

そうであれば、groupkw テーブルをエンティティとしてマップする必要はありません。これは結合テーブルであり、JPA で処理できます。

あなただけが必要です:

  • ルックアップ (id PK)
  • グループ (id PK、lookupId FK)
  • キーワード (id PK、lookupId FK)
  • GroupKeyWord (groupId FK、keywordId FK)、このテーブルの PK はタプル (groupId、keywordId) です。
于 2012-04-16T11:28:28.403 に答える