2012-03-07 4 views
0

일대 다 관계에있는 두 개의 클래스 'Method'와 'BackendMethod'가 있습니다. BackentMethod.java에서 'Methods'의 Set에 대해 mappedBy-annotation을 사용했습니다.Hibernate에서 레퍼런스를 복사하는 방법은 무엇입니까?

나는 methodCopy라는 인스턴스 methodOriginal의 복사본을 만들어 그것을 유지했습니다. methodOriginal에 의해 참조되는 모든 BackendMethod가 methodCopy에 의해 참조되도록하고 싶습니다.

나는 그들을 복사하고 싶지 않다. 새로운 '방법'에 다시 할당하기 만하면된다.

난 그냥 이런 식으로 그들에 할당하는 경우 : 모음을 찾을 공유 참조 :

HibernateException이 :

Method.backendMethoden

methodCopy.setBackendMethoden(methodOriginal.getBackendMethoden())); 

나는 HibernateException이를 얻을 수 이런 모든 것을 복사하면

methodCopy.setBackendMethoden(new HashSet<Backend>(methodOriginal.getBackendMethoden()))); 
methodCopy.persist(); 

이후 세트는 null이됩니다.

내가 뭘 잘못하고 있니?

+0

아래 답변을 시도 했습니까? 나는 그들에 대한 어떤 의견이나 수긍도 보지 못했다. – ManuPK

답변

1

나는 그들을 복사하고 싶지 않습니다. 새로운 '방법'에 다시 할당하십시오.

이것은 작동하지 않습니다. method와 backendMethod 사이의 관계를 oneToMany로 정의했기 때문입니다. 즉, 하나의 BackendMethod 엔티티는 하나의 Method (원래) 엔티티에서만 참조 할 수 있습니다. MethodCopy에 동일한 backendMethod 세트가 필요한 경우. 새로운 backendMethod 객체 세트가 필요합니다. 이 경우 해당 백엔드 메소드 엔티티가 데이터베이스에 복제됩니다 (물론 다른 PK를 사용하는 경우).

또는 manytomany와의 관계를 변경하십시오.

0

최대 절전 모드에서 참조를 복사 할 때 항상 에 id 값과 relationsship 값을 null로 설정하십시오. 여기

그래서, 당신은 methodOriginal.getBackendMethoden() 반복하고 null에 대한 참조 및 ids를 설정하고는 methodCopy로 설정해야, 내가 일반적으로 할 것입니다.

또한 methodCopy 및 id 값이 null인지 확인하십시오.

그러면 새 개체로 처리되고 유지됩니다.

관련 문제