2017-02-28 16 views
1

私はこのコードを実行しようとするとき、私は、エンティティがDashboardPageItemのリストが含まれDashboardPageと呼ばれる持っている:私は、このエラーメッセージが表示されます削除は、データベースにそれを削除せずに協会からオブジェクトを削除

for(DashboardPage dp : dashboard.getPages()){ 
      if(dp.getIndex() == dashboardPage.getIndex()){ 
       dp.getDashboardPageItems().clear(); 
       Iterator<DashboardPageItem> itDashboardPageItem = dp.getDashboardPageItems().iterator(); 
       while (itDashboardPageItem.hasNext()) { 
        DashboardPageItem dpi = itDashboardPageItem.next(); 
        itDashboardPageItem.remove(); 
       } 

      } 
     } 

deleted object would be re-saved by cascade (remove deleted object from associations): [com.dashboard.entity.DashboardPage#22] 

私は同様の問題について尋ねたところ、session.delete()を使用する必要があることがわかりましたが、これはデータベースからオブジェクトを削除し、リストから削除したいだけです。

これは私のクラスのHBMです:

DashboardPage:

<class name="DashboardPage" table="t_dashboard_page_dpa"> 
     <id name="id" column="dpa_id"> 
      <generator class="native"/> 
     </id> 

     <property name="name" column="dpa_name"/> 
     <property name="index" column="dpa_index"/> 
     <property name="model" column="dpa_model"/> 

     <many-to-one name="dashboard" 
        column="fk_das_id" 
        foreign-key="das_id" 
        not-null="false" 
        lazy="false"/> 

     <bag table="t_dashboard_page_item_dpi" name="dashboardPageItems" inverse="true" lazy="true" cascade="all,delete-orphan"> 
      <key column="fk_dpa_id" not-null="true" unique="false" foreign-key="dpa_id"/> 
      <one-to-many class="com.lomaco.cloud.DashboardPageItem"></one-to-many>  
     </bag> 


    </class> 

DashboardPageItem:

<class name="DashboardPageItem" table="t_dashboard_page_item_dpi"> 
     <id name="id" column="dpi_id"> 
      <generator class="native"/> 
     </id> 

     <property name="position" column="dpi_position"/> 

     <many-to-one name="dashboardPage" 
        column="fk_dpa_id" 
        foreign-key="dpa_id" 
        not-null="false" 
        lazy="false" 
        cascade="all"/> 

     <many-to-one name="widget" 
        column="fk_wid_id" 
        foreign-key="wid_id" 
        not-null="false" 
        lazy="false"/> 

    </class> 

どのように私はこの問題を解決することができますか?

編集:

このコードは、私がやっているからほんの一部ですので、私は、データベースは、私が行った変更の影響を受けることにしたくないが、別の部分で、私はsession.save(dashboard)を呼び出したいです私が作ったすべての変更を保存します。その後、

答えて

0

あなたが唯一の明示的(session.deleteによって呼び出された削除をカスケード接続する場合)、これに代えて:

cascade="all,delete-orphan" 

のみを使用し

cascade="all" 

削除 - 孤児カスケードの宿泊施設管理コレクションから項目を単に削除すると、トランザクションの最後に削除されます。

+0

この場合、session.saveOrUpdate(ダッシュボード)を呼び出すと、削除は機能しません。 –

+0

私は参照してください。あなたの投稿に基づいて、データベースからではなくメモリから削除したいだけです –

+0

はい、私は 'dashboard'オブジェクトに加えられたすべての変更を保存する前にリストから削除しようとしています。 –

関連する問題