2017-02-28 108 views
1

我有一個實體,稱爲DashboardPage包含的DashboardPageItem列表,當我嘗試運行此代碼:刪除刪除了關聯對象,而在數據庫中刪除它

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

是的,我試圖從列表中刪除它,然後我可以保存對「儀表板」對象所做的所有更改。 –

相關問題