2010-11-23 4 views
6

JPA 공급자로 EclipseLink를 사용하고 있습니다. 또한 나는 다음과 같은 TABLE_PER_CLASS 상속 구조JPA TABLE_PER_CLASS 상속 : 슈퍼 클래스 항목 만 선택하는 방법?

@javax.persistence.Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
@NamedQueries({ 
    @NamedQuery(name=Parent.QUERY_FIND_ALL, query="SELECT p FROM Parent p") 
}) 
public class Parent { 
     // the class code follows here 
} 

@javax.persistence.Entity 
@NamedQueries({ 
    @NamedQuery(name=Child.QUERY_FIND_ALL, query="SELECT c FROM Child c") 
}) 

public class Child extends Parent { 
     // the class code follows here 
} 

문제를 사용하고있어 지금은 상위 클래스의 항목을 수신 할 것입니다. 그러나 명명 된 쿼리 "SELECT p FROM Parent p"를 사용하면 하위 테이블의 모든 항목도 반환됩니다. 다음

셀렉트 또는 발견 코드 :

public List findWithNamedQuery(String query) { 
     return em.createNamedQuery(query).getResultList(); 
} 

이에 쿼리 즉 "부모 (P)로부터 (P)을 선택"이다.

이 상속 계층 구조의 모든 항목이 아닌 상위 항목 만 실제로받을 수 있습니까?

간단히 말해, 모든 하위 항목을 변경하지 않고 부모 항목 만 반환하려면 어떻게해야합니까?

편집 1 :
나는 EclipseLink가 2.0.1을 사용하고 있지만, 때마다 나는 유형의 표현을 통해 axtavt의 해결 방법을 시도해보십시오, 나는 다음과 같은 오류 얻을 :

"Invalid Type Expression on [my.domain.Parent]. The class does not have a descriptor, or a descriptor that does not use inheritance or uses a ClassExctractor for inheritance". 

나는 또한 업데이트 한을 EclipseLink의 최신 안정 버전 2.1.1로 업그레이드했지만 문제가 해결되지 않습니다.

+1

답변을 찾을 수 있습니까? 나는 똑같은 일을하려하고있다. 내 쿼리에 대해 부모 행만 반환하지만 하위 행도 반환됩니다. –

+0

이 질문에 대한 업데이트가 있으십니까?이 @gerry에 대한 답변을 찾았습니까? –

답변

8

은 EclipseLink가의 버전이 JPA 2.0을 지원하는 경우, 당신은 TABLE_PER_CLASS 상속과 결합의 유형 표현은 EclipseLink 2.1.1에서 't 작업 아무튼

SELECT p FROM Parent p WHERE TYPE(p) = Parent