2010-08-13 4 views
3

@OneToMany 및 @ManyToOne 주석에 몇 가지 문제가 있습니다.최대 절전 모드, 지속성 및 @OneToMany 및 @ManyToOne 특수 효과 문제

두 가지 클래스의 Suite 및 SuiteVersion이 있습니다. SuiteVersion은 스위트에 종속됩니다.

클래스 스위트 룸 :

@OneToMany(mappedBy = "suite") 
@Cascade(CascadeType.DELETE_ORPHAN) 
private List<SuiteVersion> listSuiteVersion = new ArrayList<SuiteVersion>(); 

클래스 SuiteVersion : 그래서 난 내 코드에서 이것을 구현 한

@ManyToOne() 
@Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE}) 
private Suite suite; 

하지만 난이 SuiteVersion 관련된 스위트 룸을 삭제 몇 가지 문제가 있습니다.

@Cascade(CascadeType.DELETE_ORPHAN) 

내가 스위트 삭제할 때 얻을이 로그 :

Hibernate: delete from SUITE where ID_SUITE=? 13 août 2010 09:40:50 org.hibernate.util.JDBCExceptionReporter logExceptions ATTENTION: SQL Error: -8, SQLState: 23504 13 août 2010 09:40:50 org.hibernate.util.JDBCExceptionReporter logExceptions GRAVE: integrity constraint violation: foreign key no action; FK42895651EA304E6 table: SUITE_VERSION

감사를 난 내 코드에서이 문제를 언급했기 때문에 최대 절전 모드 이유를 모르겠어 Suite.I 전에 SuiteVersion을 삭제하지 마십시오 사전에 도움을 청합니다.

최고 감사합니다,

플로랑,

P.S : 미안 내 영어는 내가 프랑스어입니다. 당신이 하지Suite에서 SuiteVersionREMOVE 작업을 계단식이기 때문이다

답변

2

But i have some problem when i delete a Suite whose have SuiteVersion associated. Hibernate don't delete SuiteVersion before Suite .

. 명확를 최대 절전 모드는 특정 보여 여기에 표준 JPA 주석을

@OneToMany(mappedBy = "suite", cascade = javax.persistence.CascadeType.REMOVE) 
@Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN) 
private List<SuiteVersion> listSuiteVersion = new ArrayList<SuiteVersion>(); 

내가 완전한 이름을 사용 : 원하는 결과를 얻으려면, 당신은 다음과 같이 (당신은 JPA 1.0을 사용하는 가정)가 필요합니다.

최대 절전 모드 특정 CascadeType.DELETE_ORPHAN는 뭔가 다른, 당신이 그것없이 SuiteVersion 기록은 부모 Suite에 대한 링크를 제거하기 위해 업데이트 될 것이다 (컬렉션에서 제거 된 특정 SuiteVersion을 삭제 최대 절전 모드 알려주는 데 사용된다 그러나 "고아"인 테이블에 남아있을 것이다).

JPA 2.0 (즉, Hibernate 3.5+)을 사용하는 경우 Hibernate 특정 주석을 사용하지 않고 고아 레코드를 처리하는 표준 방법이 있습니다. OneToMany (및 OneToOne) 연관에 orphanRemoval 옵션을 지정할 수 있습니다. 이와 같이 :

그러나 이것은 실제로 당신이 찾고있는 것이 아니기 때문에이 질문을 뛰어 넘습니다.

+0

당신 말이 맞습니다. DELETE_ORPHAN은 컬렉션에서 관련 엔티티를 제거 할 때만 작동합니다. (+1) –

+0

고마워요, 제게 많은 도움이됩니다. 하지만 나는 당신의 게시물을 배우기 전에 jpa 2.0으로 이동했습니다. 게시물이 끝나면 고아를 다루는 새로운 표준 방법에 대해 말합니다. 이 고아를 다루는이 새로운 방법을 설명해 주시겠습니까? – Delildor

+0

@Delildor : 천만에요. JPA 2.0을 사용하는 고아에 대해서는 내 업데이트를 참조하십시오. –