1

品質のリストを含む Summary クラスがあります。Quality には String 名と int 値が含まれます。このデータは、Summary と Quality の両方について、非正規化された db 構造 (1 つのテーブルのみ) に格納されます。

品質表:

id, somefileds, qualityname1, qualityvalue1, qualityname2, qualityvalue2, qualityname3, qualityvalue3

品質の名前と値のペアごとに、Summary クラスに新しい Quality オブジェクトを挿入する必要があります。

これを休止状態でマップする方法(xml休止状態マッピング)?

4

2 に答える 2

2

オブジェクトをホルダー クラスにどのようQualityに「挿入」する必要があるかは明確ではありませんが、カスタム ユーザー タイプ ( または のいずれか) がここに進む方法だと思います。Summaryo.h.u.UserTypeo.h.u.UserCollectionType

セクション5.2.3を参照してください。詳細については、ドキュメントのカスタム値の型を参照してください (マッピングについてはあまり説明がありませんtype。マッピングのようにカスタム ユーザー タイプを指定するだけです)。

于 2010-04-21T19:24:35.143 に答える
1

カスタムの CompositeUserType 実装でなんとか修正できました。マッピング ファイルは次のようになります。

<property name="qualities" type="com.foo.bar.QualityCompositeUserType">
        <column name="linkName1" />
        <column name="linkQuality1" />
        <column name="linkName2" />
        <column name="linkQuality2" />
        <column name="linkName3" />
        <column name="linkQuality3" />
</property>

CompositeUserType の returnedClass は List.class で、nullSafeSet メソッドは値の引数としてコレクションを取得します。リストから値を取得し、それらを準備済みステートメントのパラメーターに割り当てるだけです。(Qualities のリストに値がない場合は null で埋めます)。

nullSafeGet メソッドの方が簡単です。結果セットの値を使用して新しい Quality オブジェクトが挿入される新しい ArrayList を作成するだけです。

興味があれば、完全な例を追加できます。

于 2010-04-22T08:41:27.073 に答える