4

これはHQLクエリで簡単に解決できることは知っていますが、いくつかのOneToManyプロパティを使用してHibernateにこれを処理させることを好みました。

ドメインモデルを擬似コードでどのように表示するかを示します。

Game
  Long GameID
  Team HomeTeam
  Team AwayTeam
  @OneToMany(mappedBy="team")
  Set<TeamPlay> HomeTeamPlays
  @OneToMany(mappedBy="team")
  Set<TeamPlay> AwayTeamPlays

テーブル構造は似ており、ゲームテーブルのチームテーブルを指す2つの外部キーがあります。明らかに、外部キーが1つしかない場合、それは真の1対多の関係を表しますが、実際には、同じエンティティの子タイプに対する2つの双方向の1対多のプロパティが必要です。

@Whereアノテーションを使用すると定数が必要になるため、機能するとは思われません。@JoinColumnはここでは許可されていません。それが不可能な場合、それは大丈夫です、私は他の誰かからそれをここにしたかっただけです。

4

2 に答える 2

8

あなたはmappedByの使い方を本当に理解していないに違いありません。

https://stackoverflow.com/a/13812047/395202で私の他の答えを参照することができます

つまり、mappedByは、双方向の関係の「反対側」にあるプロパティ名です。

あなたの場合、それはおそらく次のようになります:

class TeamPlay {
    @ManyToOne
    Team homeTeam;

    @ManyToOne
    Team awayTeam;
}

class Team {
    @OneToMany(mappedBy="homeTeam")
    Set<TeamPlay> homeTeamPlays;

    @OneToMany(mappedBy="awayTeam")
    Set<TeamPlay> awayTeamPlays;
}
于 2012-12-19T01:19:52.560 に答える
0

コードに問題はありません。TeamPlayクラスの@ManyToOneでテストしましたが、正常に動作します。期待どおりにTeamPlayテーブルに結合列を作成します。珍しいことは何もありません

于 2012-12-18T22:31:48.330 に答える