문제

HBM.XML에서 이와 같은 다중 협회가 설정되어 있습니다.

<many-to-one name="gigVenue"
class="blah.blah.xxx" fetch="select"
lazy="no-proxy" not-null="true" >
<column name="N_VENUE_ID" precision="18" scale="0" not-null="true" />
</many-to-one>

그리고 나는 악기를 사용하여 진정한 게으른 하중을 수행하고 있습니다.

그러나 다른 테이블에 내부 결합이있는 HQL 쿼리를 실행하면 다른 테이블의 값인 객체를 포함 해야하는 속성은 널로 남습니다. 비록 다른 테이블의 가치 객체가 최대 절전 모드에 의해 생성되는 것을 볼 수 있습니다.

이 문제에 대한 통찰력이 있습니까?

업데이트:

from Gig g inner join fetch g.gigVenue gv where g.artistId = :artistId and  (g.territoryId = -1 or g.territoryId = :territoryId) order by g.gigDatetime desc

<set name="gigs" inverse="true" lazy="true" table="DSP_GIG" fetch="select">
<key>
<column name="N_VENUE_ID" precision="18" scale="0" not-null="true" />
</key>
<one-to-many class="blah.blah.Gig" />
</set>
도움이 되었습니까?

해결책

연관성 프록시 대신 바이트 코드 계측을 사용하기 때문에 (왜?) 쿼리에 "모든 속성 페치"를 지정해야합니다.

from Gig g fetch all properties ... 

세부 사항은 다음과 같습니다 여기

업데이트: 당신의 gigVenue 매핑이 설정됩니다 lazy 에게 no-proxy. 그 의미는 Getter 방법을 통해 처음으로 액세스 할 때까지 속성이 널이 될 것입니다. 이것은 바이트 코드 계측을 사용하여 수행되며 일반적으로 사용되는 것이 아닙니다. HQL 사용 join fetch 그러한 재산을 채우지 않을 것입니다. 명시 적으로 지정해야합니다 fetch all properties 위에서 설명한대로.

설정을 고려하십시오 lazy="proxy" 대신 (이것은 실제로 다중-하나의 기본값) 프록시 객체가 포함 된 재산을 초기화합니다. gigVenue 초기 선택 중에 식별자가있는 다음 중 하나에 액세스하면 실제 엔티티를 검색합니다. GigVenue의 방법. 사용 join fetch HQL에서는이 경우에도 작동하여 전체를 가져옵니다. GigVenue 초기 선택 중에 인스턴스.

그 메모에서, 설정 fetch="select" 또한 의문의 여지가 있습니다. 당신은 기본값으로 떠나는 것이 더 나을 것입니다. join 페치를 위해 OUTER 조인을 사용하여 활성화 할 수 있습니다.

다른 팁

계측은 실제로 쿼리와 작동 방식에 영향을 미치지 않습니다. 왜 정확히 쿼리에서 페치를하고 있습니까? 속도를 높이려고합니까?

그리고 또한 작은 질문은 알다 그 값은 null입니까? Java Debugger를 통해 또는 실제로 "get"메소드를 호출하는 것입니까? 계측을 사용하면 필드가 실제로 필드를 요구할 때까지 필드는 일반적으로 널입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top