2012-04-30 2 views
0

내 앱은 리그를 보유하고 있으며 각 리그는 여러 경기를 가질 수 있습니다. 나는 .hbm.xml 파일을 사용하여 리그와 대회 간의 연관성을 설정합니다. 다음과 같이 나는 그것을 구성했습니다 최대 절전 모드 : 다 대다 연관성이 비어 있습니다.

<set name="competitions" table="leagueCompetitions" lazy="false"> 
    <meta attribute="property-type"><![CDATA[Set<Competition>]]></meta> 
    <meta attribute="default-value"><![CDATA[new HashSet<Competition>()]]></meta> 
    <key column="leagueId"/> 
    <many-to-many column="competitionId" 
      unique="true" 
      lazy="false" 
      class="com.example.model.Competition"/> 
</set> 

나는 기본적으로 내가 대회를 계산하는 몇 가지 코드를 작성 아래

Query query = session.createQuery("from League"); 
return query.list(); 

에 제공 리그의 목록을 검색하는 DAO 방식을 가지고, 그것은이었다

if (league.getCompetitions().size() > 0) { ... blahditty blah ... } 

그러나 getCompetitions()은 항상 빈 세트이므로 실패했습니다.

질문 : 리그 목록을 얻으려는 경우 LeagueDAO.list()를 사용할 때 각 리그에서 모든 대회가로드되어서는 안됩니까?

답변

1

내 hbm.xml 구성이 잘못된 것을 밝혀졌습니다. 하나의 테이블에는 다 대다 구성을 사용했고 연관의 반대편에는 many-to-one을 사용했습니다. 그 결과는 엉망이었습니다.

2

이 폭포를 추가 = "모든"

<set name="competitions" table="leagueCompetitions" lazy="false" cascade="all"> 
<meta attribute="property-type"><![CDATA[Set<Competition>]]></meta> 
<meta attribute="default-value"><![CDATA[new HashSet<Competition>()]]></meta> 
<key column="leagueId"/> 
<many-to-many column="competitionId" 
     unique="true" 
     lazy="false" 
     class="com.example.model.Competition"/> 

+0

고맙지 만 Hibernate의 동작에 어떤 차이도없는 것 같습니다. 그리고 [이전에 읽은 것] (https://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies)은 "select"보다 기본값입니다. – Marvo

+0

또한 cacade = "all"없이 저장할 수 있습니다. "개체 참조가 저장되지 않은 일시적인 인스턴스를 참조하십시오 - 플러시하기 전에 일시적인 인스턴스 저장" – mprabhat

+0

그 중 하나가 작동하지 않습니다. – Marvo