0

エンティティ クラス Person と Book が必要であり、どちらもフィールド名 date (タイプ java.util.Date の pe) を持ち、Person の生年月日と Books の発行日を表し、もちろんどちらも一意ではありません。Entity クラスの Person で、関係 (ManyToMany) to Books を作成します。これは、その人の誕生日に発行されたすべての本を返します。これは可能ですか?もしそうなら、ManyToMany 関係 (および JointTable) をどのように定義する必要がありますか? フィールドは両方のエンティティで日付と呼ばれ、一意ではないことに注意してください。

私は試した

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
    name = "test",
    joinColumns = @JoinColumn(name = "date", unique=false),
    inverseJoinColumns = @JoinColumn(name = "date", unique=false)
  )

ただし、開始時に例外が発生します ( org.hibernate.MappingException: コレクションのマッピングで列が繰り返されます)

そして私は試しました

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
    name = "test",
    joinColumns = @JoinColumn(name = "date_person", unique=false),
    inverseJoinColumns = @JoinColumn(name = "date_book", unique=false)
  ) 

ただし、空のテーブルが作成されます。私は何かが欠けているに違いない。

4

1 に答える 1

3

関連付けの役割は、そのような種類の関係をモデル化することではありません。ManyToMany は、たまたま同じ名前と値を持つ任意の列では機能しません。結合された各エンティティへの外部キーを含む結合テーブルで機能します。

人の誕生日と同じ日に出版されたすべての本を取得するには、次のクエリを実行します。

select b from Book b where b.date = :dateOfBithOfPerson
于 2013-07-05T17:14:45.037 に答える