2008-11-10 3 views
2

내 애플리케이션에서 Spring과 함께 Hibernate를 사용하고있다. 나는 끊임없이 분리 된 객체를 사용하여 데이터베이스 호출이 필요할 때마다 다시 연결했다. 나에 대한 연결을 관리하기 위해 최대 절전 모드 템플릿을 사용하고있다.hibernate와 병합하여 더러운 객체에 에러를 일으킨다.

classA a = (classA)hibernateTemplate.merge(newClassA); 
:

classA: 
    <one-to-many name="classB" inverse="true" cascade="all,delete-orphan" lazy="true"> 

classB: 
    <one-to-many name="classC" inverse="true" cascade="all,delete-orphan" lazy="false" fetch="subselect"> 

내가 ClassB가 또는 classC에있는 항목 중 일부가 변경하는 잠재력을 가진 다음 전화를 만들 때, 나는 오류가 다음과 같이

내 데이터 구조입니다

내가 오류는 다음과 같습니다

[11/10/08 12:08:39:126 EST] 00000024 SystemOut  O 2008-11-10 12:08:38,876 - - ca.thedominion.cfa.persistence.hibernate.ClassADAOImpl :updateClassA Technical Exception occurred: 
org.springframework.dao.InvalidDataAccessApiUsageException: deleted object would be re-saved by cascade (remove deleted object from associations): [ca...classC#715590]; nested exception is org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [ca...classC#715590] 
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:639) 
    at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412) 
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424) 
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) 
    at org.springframework.orm.hibernate3.HibernateTemplate.merge(HibernateTemplate.java:820) 

누군가는 왜이 에로을 생성하는 나에게 설명 할 수 아르 자형? 내가 알기에, 병합은 트리의 어떤 오브젝트가 변경되었는지, 그리고 업데이트/삭제/삽입을 결정하고, 다른 오브젝트를 삭제하고 다시 삽입하려고 시도해서는 안됩니다. 그러나 이것은 classC 유형의 모든 요소를 ​​삭제하고 다시 삽입하려고 시도하는 것 같습니다.

답변

4

분명히 classC 중 하나를 삭제했지만 컬렉션 중 하나에 남아 있습니다. 이제 Hibernate는 무엇을해야하는지 혼란 스럽다 : 당신이 그것을 삭제했지만, collection은 cascade = "all"(저장을 포함한다)이고, 당신은 콜렉션 (삭제 된 객체 포함)을 저장할 것이다.

classC 객체를 직접 삭제하지 말고 컬렉션에서 제거하거나 두 작업 (삭제 및 컬렉션에서 제거)을 수행해야합니다.

관련 문제