2017-02-28 1 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" 

h 제 - 고아 계단식 속성 관리되는 컬렉션에서 항목을 단순히 제거하면 트랜잭션이 끝날 때 삭제됩니다.

+0

session.saveOrUpdate (대시 보드)를 호출하면이 경우 삭제가 작동하지 않습니다. –

+0

알겠습니다. 귀하의 게시물을 바탕으로 데이터베이스에서가 아닌 메모리에서 제거하려는 경우 –

+0

예, 'dashboard'객체에 대한 모든 변경 사항을 저장하기 전에 목록에서 삭제하려고합니다. –

관련 문제