1

Hibernateを使用してJavaObjectPersistenceを実装する方法を学習しようとしています。具体的には、単方向の1対多マッピングを実装する方法を理解しようとしています。私は休止状態のドキュメントとこのテーマに関する多数のStackoverflowの質問を読みましたが、それらは完全には明確ではないので、これを実装する正しい方法を知りたいと思います。

これは、私がマップしようとしている種類のJavaオブジェクトの(非常に単純化された)例です。

public class Student {
    private List<StudentGrade> grades;

}

public class StudentGrade {
    private char letterGrade;
    private double percentageGrade;
}

だから問題は、これをマップするためにhbm.xmlファイルをどのように書くのですか?

休止状態のドキュメントは、Studentのマッピングファイルに配置されたこれで十分であることを示しています。もちろん、StudentとStudentGradeの両方のマッピングファイルを完全に肉付けしたと仮定します。

<many-to-one name="StudentGrade" column="grade_id" />

ただし、マッピングファイルのみが表示され、それに付随するJavaオブジェクトは表示されません。マッピングファイルには、その多対1の要素が他のプロパティとともに一覧表示されます。リストまたはセット要素には含まれていません。コレクション(例ではHashTableとして実装されたセット)を使用するJavaオブジェクトが表示される他の場所には、次のようなマッピングファイルがあります。

<set name="events" table="PERSON_EVENT">
    <key column="PERSON_ID"/>
    <many-to-many column="EVENT_ID" class="Event"/>
</set>

それは私が多くのStackOverflowの質問で見たものでもあります。では、これを実装する正しい方法は何ですか?

4

1 に答える 1

1

引用した2つの例は、多対1と多対多のマッピングであり、どちらもモデルには適用できません。1対多のマッピングが必要です。

Studentとクラスが与えられた場合StudentGrade、次のマッピング記述子に次のようなものが必要ですStudent

<list name="grades">
   <list-index column="idx"/>
</list>

のクラスマッピングも必要ですStudentGrade

それがあなたが望むリストであることを確認しますか?リストにはデータベース内の明示的なリスト位置列が必要ですが、実際には必要ないと思います。セットまたはバッグはHibernateでのマッピングが簡単で、必要なデータベース列が少なくなります。バッグ、セット、マップ、リストなどをマップする方法については、ドキュメントを参照してください。

于 2010-02-12T15:41:27.773 に答える