2010-02-23 4 views
3
최대 절전 모드로

나는 다음과 같은 것을 수행하는 데 사용 해요 :EclipseLink JPQL (Glassfish v3) : 가져 오기 구문에 문제가 있습니까?

Caused by: Exception [EclipseLink-8024] (Eclipse Persistence Services - 2.0.0.v20091127-r5931): org.eclipse.persistence.exceptions.JPQLException Exception Description: Syntax error parsing the query [select n from NetworkElement n join fetch n.site s], line 1, column 49: syntax error at [s].

(스택에 쿼리가 다르다 그러나

select n from NetworkElement n join fetch n.site s where s.active is true 

을 EclipseLink가 이것에 대해 많은 불만 위와 같지만 결과는 같습니다.)

다른 조합을 시도했지만 그 중 아무 것도 작동하지 않았습니다.

select n from NetworkElement n join fetch n.site where n.site.active is true 
select n from NetworkElement n join fetch n.site as site where site.active is true 

내 매핑이 올바르지 않다고 의심되어 내 도메인 모델의 다른 엔터티로 전환하려고 시도했습니다. 여전히 같은 문제입니다.

쿼리 힌트를 사용하여이 작업을 수행 할 수 있습니까? 나는 그것을하고 싶지 않다.

그런데 Netbeans 6.8 및 Glassfish v3와 함께 제공되는 EcliseLink를 사용하고 있습니다.

도움을 주시면 감사하겠습니다.

로드리고

+0

eclipselink의 버그 추적기 – Bozho

답변

4

주요 문제는 페치 JPQL 구문은 앨리어싱을 허용하지 않는다는 것입니다 조인과는 EclipseLink이 기능에 대한 쿼리 힌트를 사용하는 이유입니다. JPQL에서 앨리어싱 조인 가져 오기를 직접 추가 할 수있는 개선 요청이 있으며 완료되었는지 확인하려는 경우 투표하십시오. (https://bugs.eclipse.org/bugs/show_bug.cgi?id=293775).

--Gordon 요크

+0

에 문제가 있습니까? Hibernate는 JPA를 통해 그것을 가능하게한다. 글쎄, 그것은 Hibernate 확장이 될 수 있지만, 항상 네이티브 JPQL 기능입니다. – javabeats

0

글쎄, HQL을 통해 앨리어싱 지원하기 때문에 하나가 참 .. 최대 절전 모드로 작동하는이 JPQL에 참여 인출 별칭을 허가되어 있지 않은 것 같다, 당신은 HQL을 발행 할 수 있습니다 JPA Query 객체에 추가합니다.

따라서 쿼리 힌트가있는 명명 된 쿼리로 전환 할 수 밖에 없었습니다. 나는 때문에 엔티티 클래스에 대한 높은 상세의 주석으로 쿼리를 선언처럼 정말하지 않는, 그래서 나는 다음과 같은 퍼시스턴스 유닛의 항아리에 orm.xml 파일을 추가하고, 한이 몇 가지 있습니다

<!-- Fetch network elements --> 
<named-query name="fetchNetworkElements"> 
    <query>select n from NetworkElement n</query> 
    <lock-mode>NONE</lock-mode> 
    <hint name="eclipselink.join-fetch" value="n.site" /> 
    <hint name="eclipselink.join-fetch" value="n.site.area" /> 
</named-query> 

희망을 원시 JPQL과 동일한 단점으로 어려움을 겪고있는 누군가에게 단서를 제공합니다.