2016-06-30 1 views
0

부모 (일대 다) 통해 그것을 통해 수행 할 필요없이 자식 삭제하려고합니다. 보통 다음과 같이 나타납니다.최대 절전 모드 삭제 된 자식 부모 목록에 유지

Parent p = db.getParent(parentId); 
p.getChildList().remove(child); 
db.update(p); 

허용하려면 뭔가해야합니까?

db.delete(child); 

이 작업을 수행하고 부모를 다시 검색하면 자식 목록에 null 값이 있습니다. xml 매핑 파일을 완전히 제거하도록 할 수 있습니까?

부모

<list name="child" inverse="false" cascade="all,delete-orphan"> 
     <key column="PARENTID" not-null="true"/> 
     <list-index column="childOrder"/> 
     <one-to-many class="Child" /> 
    </list> 

아이

<property name="parentId" type="string" update="false" insert="false"> 
     <column name="PARENTID" not-null="false"> 
     </column> 
    </property> 
    <property name="childOrder" type="java.lang.Integer" update="false" insert="false"> 
     <column name="CHILDORDER" not-null="false"> 
     </column> 
    </property> 
+0

부모 및 자식 매핑 방법에 대한 자세한 정보를 제공하십시오. –

+0

@ShankarPS 안녕하세요 Shankar, 매핑을 표시하도록 편집했습니다. 어떤 아이디어? 감사. –

+0

의사 코드 만 입력했습니다. 가능한 한 항상 실제 코드로 질문을 게시하십시오. –

답변

0

아마 당신의 질문에 오타이지만, 왜 당신이 childId을 제거? 하위 객체를 사용해야합니다.

이미 시도하지 않았다면 시도해보십시오.

//Look up the child object and then use it. 
Child c = (Child) session.get(Child.class, new Integer(childId)); 
p.getChildList().remove(child);   
session.saveOrUpdate(p); 
+0

미안 해요, 아이는 내가 의미했던 것입니다. Hibernate 세션은 우리에게 숨겨져 있으며 우리는 매핑을 제공하기는하지만 그들이 제공하는 인터페이스를 사용한다 (그러므로 childId vs child). 내 Child 객체에 부모에 대한 참조가없는 경우이 객체는 단방향으로 연결됩니까? 부모에게만 자식에 대한 링크가 있지만 자식에게 부모 링크가 없음을 의미합니까? 그렇다면 내 경우에 자녀를 삭제해도 상위 목록에서 삭제되지 않는 이유는 무엇입니까? –

+0

예. 하위가 상위를 참조하지 않는 경우 단방향 관계입니다. 그러나 "inverse = false"를 지정 했으므로 부모가 관계를 소유하고 있음을 의미합니다. 그래서, 이것이 효과가 있습니다. 그러나 나는 당신이 업데이트 = "거짓"을 설정하고 삽입 = "거짓"을 알게되었습니다. 왜 그런가요? 즉,이 열은 변경되지 않습니다. 그것을 제거하고 시도해 볼 수 있습니까? –

+0

죄송합니다 Shankar, 내가 매핑 라인을 놓친 것으로 밝혀졌습니다. 부모가 계속 유지하기를 원하는 childOrder (매핑에서 업데이트 됨)도 있습니다. 자식이 추가 될 때마다 순서 값이 설정됩니다. 업데이트 + 삽입 오류로 인해 내가 보는 문제가 왜 발생합니까? 고마워. –

관련 문제