2012-04-03 2 views
0

나는 절전 모드를 사용하고 빈 데이터베이스를 채우기 위해 코드를 작성하고있다. 나는 문장, 문구, 그리고 편지를 고집하는 척 해봅시다. 문구와 문장 모두에서 문자가 발생하기 때문에 나는 각각 LetterEntitySentenceEntity에 대한 참조가 있고 각각 SentenceEntity에 문자 집합이 있어야합니다.Hibernate : 영속 콜렉션에서 영속 클래스를 재사용

@OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE}, fetch=FetchType.LAZY) 
@JoinColumn(name="sentenceid") 
@Sort(type=SortType.NATURAL) 
public SortedSet<LetterEntity> getLetters() { 
    return this.letters; 
} 

지금까지 문제가 없습니다. PhraseEntity에 글자와 구문의 하위 집합이 겹칠 수 있기를 바라므로 글자가 여러 개일 수 있습니다. 이를 위해서는 관계에 대한 추가 표가 필요합니다.

@OneToMany(fetch = FetchType.LAZY) 
@JoinTable(name = "phrase_letters", joinColumns = @JoinColumn(name = "phraseid"), inverseJoinColumns = @JoinColumn(name = "letterid")) 
@Sort(type=SortType.NATURAL) 
public SortedSet<TypeEntity> getLetters() { 
    return this.letters; 
} 

나는 데이터베이스를 채우는

은, 난 그냥 문장 컬렉션에 추가 할 수있는 문자의 setSentenceId 설정합니다. 그러나 setLetters을 사용하여 문구에 Letter를 추가하면 Hibernate는 Letter를 다시 유지하려고 시도하고 예외가 발생합니다. 최대 절전 모드를 사용하지 않고 프레이즈에 문자를 다시 추가하려면 어떻게합니까?

업데이트 : 나는 단정적 인 연관성에 대해 읽는 것이 매우 도움이된다는 것을 알았습니다. 내 질문의 일부 있지만

http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#collections-bidirectional

, 나는 많은 전단 사 협회가 설정했다. 대량 삽입이 훨씬 빨라지기 때문에 부분적으로 필요한 부분을 찾습니다. 콜렉션에 요소를 추가 할 때, Hibernate는 갱신 질의를 보낸다.

업데이트 : 나는 바보입니다. Phrases와 Letters 사이의 관계는 Many-To-Many이고 핵심 제약 조건을 위반했기 때문에 실제로 예외가 발생했습니다.

답변

1

관계를 어떻게 만드십니까? 귀하의 경우에 적합한 것으로 보이는 아래 코드는 정상적으로 작동합니다.

LetterEntity letter = new LetterEntity(); 
    PhraseEntity phrase = new PhraseEntity(); 
    SentenceEntity sentence = new SentenceEntity(); 

    sentence.getLetters().add(letter); 
    s.persist(sentence); 
    phrase.getLetters().add(letter); 
    s.persist(phrase); 
+0

나는 문장을 유지하고 그 문장을'문장 '으로 설정 한 다음 문장에 문자를 추가한다. 어쩌면 그것이 문제 일 수 있습니다. – schmmd

관련 문제