0

HIbernate 3.2.5 を使用しています。Dept と Training テーブルの間に 1 対多の関連付けがあります。1 つの部門で複数のトレーニングを受けることができます。

<id name="deptId" type="integer" column="DEPT_ID">
      <generator class="assigned"></generator>
  </id>
  <property name="deptName">
      <column name="DEPT_NAME"></column>
  </property>
  <map name="trainingDetails" inverse="false" cascade="delete" lazy="false">
      <key column="DEPT_ID"></key>
      <map-key formula="ID" type="integer"></map-key>
      <one-to-many class="model.Training"/>
  </map>      

エントリを削除しようとすると:

SessionFactory sf = new Configuration().configure("trial.cfg.xml").buildSessionFactory();
    Session session = sf.openSession();
    Dept department = new Dept();
    department.setDeptId(2);        
    session.delete(department);
    session.flush();
    session.close();

子テーブルでは、削除クエリではなく更新クエリがコンソールに出力されていることがわかります。

update training set DEPT_ID=null where DEPT_ID=?

しかし、カスケードであるdeleteため、子テーブルも権利deleteではなく操作を実行する必要がありupdateますか?

私の間違いがどこにあるのか教えてください。

よろしく、

4

1 に答える 1

1

DELETE_ORPHAN子オブジェクトがスタンドアロンで存在できないことを示すようにカスケードを使用すると、それが行われます。

さらに、削除する前にオブジェクト グラフをロードしていません。以下のように削除を実行します。

SessionFactory sf = new Configuration().configure("trial.cfg.xml")
                                       .buildSessionFactory();
    Session session = sf.openSession();
    //load the object before deleting
    Dept department = session.get(Dept.class, new Integer(2));
    session.delete(department);
    session.flush();
    session.close();
于 2012-11-10T16:34:13.700 に答える