0

Eclipseを使用して既存のmysqlデータベースでHibernateを使用しようとしています。

テーブルをクラスにマッピングし、クエリを実行することに成功しました。しかし、私は1対多の関係に問題があります。

テーブル「CARATTERISTICHE」(属性)があります。これは、実際には、結合テーブル「VALORI」(値)「fk_child」「fk_parent」によって記述されたツリーです。

クラスCaratteristicaには、タイプが「children」のフィールドList<Caratteristica>があり、子供はCARATTERISTICAおよびVALORIと結合する必要があります。

私の最初の試みは、pojo Caratteristicaを作成し、Eclipseに休止状態の構成ファイルを生成させることでした。

getChildrenを起動すると、取得したオブジェクトはすべて同じオブジェクトであるため、これは機能しません(つまり、すべてのノードが父親であり、データベースではfalseです)。

これは、生成されたxmlの抜粋です。

<class name="model.Caratteristica" table="caratteristiche">
  <id name="id" type="java.lang.Integer">
   <column name="ID"/>
   <generator class="assigned"/>
  </id>
  <set access="field" lazy="true" name="children"
   sort="unsorted" table="valori">
   <key>
    <column name="id"/>
   </key>
   <one-to-many class="model.Caratteristica"/>
  </set>

列キーをidからfk_childに変更すると、テーブル「CARATTERISTICHE」でfk_childが見つからないことに注意してください(ただし、VALORIで表示されるはずですよね?)

また、テーブルからpojoを生成しようとしましたが、さらに悪いです。多分、この問題はHibernate-複合キー構成にありますが、Hibernateを使用するのは初めてで、本当に迷っています。

4

1 に答える 1

1

あなたのデータモデルは少し奇妙です。

完全なツリー構造、つまり親と子の間に1:nの関係があるかのどちらかです。その場合、結合テーブルVALORIは必要ありません。CARATTERISTICHEでは、親行のIDを含む列parentIdを定義するだけです。マッピングでは、この新しい列をキータグとして指定します。<key> <column name="parentId"/> </key>

または、親と子の間にm:nの関係があります。これは、結合テーブルVALORIによって定義されます。ツリー構造は、m:nの関係を持つ特殊なケースとして定義できますが、他の構造も可能です。<many-to-many>次に、 (1対多ではなく)タグを使用する必要があります。<many-to-many>タグには、他のテーブルの対応する外部キーの名前を指定できる属性が含まれていますcolumn

于 2013-02-25T14:37:40.627 に答える