私はHibernateを初めて使用するので、やりたいことが可能かどうか(または正しいことかどうか)完全にはわかりません。そうでない場合は、探していることを達成する他の方法を自由に提案してください。
コンペティションとフィクスチャの 2 つのエンティティがあります。それらの間には一対多の関係があります。これを達成するために注釈を設定する方法は知っていますが、私が苦労しているのは、関係を双方向にすることです。私のアプリケーションが長時間実行されると、競技会に属するフィクスチャの数が増えてしまいます。Fixture オブジェクトにアクセスする最も一般的な方法は、特定の日付を指定することによるコンペティション経由です (getFixtures(today) など)。私は、Fixture の日付をその日付の Fixtures のコレクションにマップする Map を Competition クラスに持つことで、これを実装できると考えました。ただし、Hibernate でこれを設定する方法がわかりません。
以下は、POJO とアノテーションの簡略化されたセットで、これまでの内容を示しています。
@Entity
public class Competition {
// This is what I would like to have.
private Map<Date, Collection<Fixture>> fixtureMap;
public Collection<Fixture> getFixtures(Date day) {
return fixtureMap.get(day);
}
// This is all I know how to do.
private Collection<Fixture> fixtureList;
@OneToMany(mappedBy = "competition")
public Collection<Fixture> getFixtureList() {
return fixtureList;
}
}
@Entity
public class Fixture {
private Competition competition;
@ManyToOne
public Competition getCompetition() {
return competition;
}
}
このことからわかるように、競技用のフィクスチャのセット全体にアクセスするための関係を設定できます。しかし、特定の日の Fixtures を取得するには、Fixtures のコレクション全体を繰り返し処理し、それぞれの日付を確認する必要があります。Date からフィクスチャのコレクションへのマッピングを Hibernate に処理させる方法はありますか? それができれば、日付をマップのキーとして使用して、その日のフィクスチャのコレクションに簡単にアクセスできます。