スタック オーバーフローの専門家の皆様、こんにちは。あなたの専門知識が必要です。
既存の DB で Hibernate を使用しようとしています。現在、 User オブジェクトと、それに付随する UserData オブジェクトのリストを読み込もうとしています。
DBでは(簡略化された)レイアウトは
| User | | UserData |
---------------- -----------------------------------
uid | username | | uid | parentuid | field | value |
したがって、各 User オブジェクトは、UserData.parentuid = User.uid であるすべての UserData オブジェクトに一致します。
My User クラス マッピング ファイル
<class name="com.agetor.commons.security.User" table="ac_users">
<id name="uid" column="uid" type="long" >
<!--<generator class="native"/>-->
</id>
<property name="username" column="username" />
<list name="fieldData" cascade="all">
<key column="parentuid" not-null="true" />
<index column="parentuid" />
<one-to-many class="com.agetor.commons.fields.FieldData"/>
</list>
</class>
Mu UserData マッピング ファイル
<class name="com.agetor.commons.fields.FieldData" table="ac_userdef_data">
<id name="uid" column="uid" type="long" >
<!--<generator class="native"/> -->
</id>
<!--<property name="parentuid" column="parentuid" /> -->
<property name="fieldname" column="fieldname" />
<property name="value" column="value" />
</class>
これまでに多くの異なる構成を試しましたが、それらのすべてにさまざまな程度の失敗がありました。ここに貼り付けたコードは機能しません。
- そうしないと、Hibernate が「マッピングで列が繰り返されました」というエラーを出すため、parentuid プロパティはコメントアウトされています。
- 現在、uidフィールドにはまだ「マッピングの繰り返し列」があります。
<list-index />
- UserData.parentuid が外部キーであり、リストが User.uid をキーとして使用する必要があることを指定する場所がわかりません。
誰かが助けてくれることを願っています。
1 対多と多対 1 の両方を定義すると、双方向になりませんか? 現在の作業モデルは単方向であり、UserData には User への参照がありません。Hibernate が UserData で User の get メソッドまたは set メソッドを見つけられなかったため、提案は失敗しました。
このコードは User.uid をキーとして使用し、これを UserData.parentuid 列と照合することを暗示していますか? それとも、この事実は別の場所で指定されていますか?
<list name="fieldData" inverse="true">
<key column="parentuid" not-null="true" />
<one-to-many class="com.agetor.commons.fields.FieldData"/>
</list>
私はまだHibernateを学んでおり、見つけたドキュメントと例を通して自分の道を進んでいます。