2013-10-28 2 views
2

Form, FormConfig 및 GroupForms의 3 가지 엔트리 사이의 관계에 다음과 같은 문제가 있습니다. 모델은 Form과 GroupForms 사이의 manyToMany 관계이지만,이 조인과 관련된 몇 가지 추가 데이터가 있습니다. 따라서 FormConfig 엔티티를 모델링했습니다. Form은 OneToMany 관계의 FormConfig와 관련이 있고 GroupForms는 OneToMany 관계의 FormConfig와 관련이 있습니다.최대 절전 모드 엔티티의 복잡한 관계

Form.java :

... 
@OneToMany(mappedBy = "form", cascade = CascadeType.ALL) 
private List<FormConfig> formConfigs = new ArrayList<FormConfig>(); 
... 

GroupForms.java :

... 
@OneToMany(mappedBy="group", fetch=FetchType.EAGER) 
private List<FormConfig> formConfigs = new ArrayList<FormConfig>(); 

FormConfig :

... 
@ManyToOne 
@JoinColumn(name = "kf_grupa_id") 
private GroupForms group; 

@ManyToOne 
@JoinColumn(name = "kf_formularz_id") 
private Form form; 
.... 

내가 어떤 그룹을 만들어, 지금은 원하는 코드에서이처럼 보인다 새 양식을 만들고 GroupForms에 가입하려면 다음과 같이하십시오.

void createFormInGroup(GroupForms groupForms) { 
    Form form = new Form(); 
    /*setters execution*/  
    form.set(..); 
    .... 
    FormConfig formConfig = new FormConfig(); 
    /*setters execution*/ 
    formConfig.set(..); 
    .... 
    formConfig.setGroup(groupForms); 
    formConfig.setForm(form); 
    form.getFormConfigs().add(formConfig); 
    groupForms.getFormConfigs().add(formConfig); 

    /* code responsible for beginTransaction */ 
    session.saveOrUpdate(formConfig); 
    session.saveOrUpdate(form); 
    session.saveOrUpdate(groupForms); 
    /* code responsible for endTransaction */ 
} 

하나의 그룹에 대해이 함수를 두 번 호출합니다. 즉, 두 개의 폼을 만들고 그 폼을 하나의 그룹에 포함해야합니다. 그러나 불행하게도, hibernate를 사용하는 질의는 엔티티 GroupForms에서 두 줄을 반환한다. 내 테이블을 확인하고 엔터티 GroupForms와 연결된 테이블에 행이 하나만 있습니다. 누구든지 그걸 도울 수 있니? 나는 왜 hibernate가 데이터베이스에 존재하는 것보다 더 많은 GroupForm을 반환하는지 알지 못한다.

감사

+0

사용중인 쿼리는 무엇입니까? – Shailendra

+0

다음과 같은 것 : Query q = session.createQuery ("FROM"+ "GroupForms"+ "O ORDER BY"+ sort + ""+ this.setOrder (order)); 주문 및 정렬이 정의 된 곳 – user2539823

+0

생성 된 SQL을 붙여 넣으십시오. 실행시 로그 또는 콘솔에서 찾을 수 있습니다. 쿼리의'this.setOrder (order)'부분에 혼란 스럽다. – alterfox

답변

2

이 가장 가능성이 다음에 의해 발생 :

@OneToMany (mappedBy = "그룹"= 가져 FetchType.EAGER)

자세한 설명은 여기를 참조하십시오 :

Hibernate Criteria returns children multiple times with FetchType.EAGER

그리고 비슷한 질문에 대한 대답은 다음과 같습니다.

Hibernate and criteria that return the same items multiple times

+0

고맙습니다. 나는 이것을 추가했다 : @Fetch (FetchMode.SUBSELECT)와 질의는 그룹의 숫자를 적절히 반환한다! 하지만 또 다른 버그가 있습니다 : 이제 FormConfig 요소를 삭제할 수 없습니다 : form.getFormConfigs(). clear(); session.saveOrUpdate (form); 데이터베이스에는 여전히 FormConfig 요소가 있습니다. – user2539823

+1

@OneToMany의 orphanRemoval 속성을 살펴보십시오. http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Orphan_Removal_.28JPA_2.0.29 및 http://stackoverflow.com/questions/4329577/jpa-2- 0-orphanremoval-true-vs-on-delete-cascade –