문제

나는 EL을 사용하고 있고 아래의 질의를 실행할 때 0을 유지합니다.현재 활성화 된 지원자 수 (AP) 수를 얻고 싶습니다.어린이 엔티티 신청자는 사람의 모든 요소를 쿼리하는 것을 피하고 싶습니까?

@RooJavaBean
@RooToString
@RooEntity(identifierColumn = "personID", inheritanceType = "SINGLE_TABLE")
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.STRING, length = 20)
@DiscriminatorValue("P")
public class Person {

    @NotNull
    @Size(min = 1, max = 50)
    private String FirstName;

    @NotNull
    @Size(min = 1, max = 50)
    private String LastName;
}
.

자식 엔티티 '신청자'

@RooJavaBean
@RooToString
@RooEntity
@DiscriminatorValue("AP")
public class Applicant extends Person{

    private String major;

    private String nativeLanguage;

    private String ethnicity;

    private String hispanic;
}
.

내 쿼리 시도 :

   /**
     * 
     * @return
     */
    public int getCountActiveApplicants(){

        EntityManager entityManager = factory.createEntityManager();
        int value = entityManager.createQuery("select count(distinct o) from Person o where o.TYPE = \"AP\" AND o.active = \"Yes\" ").getFirstResult();

        System.out.println("wowzer " + value + "\n");
        return value;
    }
.

도움이 되었습니까?

해결책

왜 단순히 지원자를 계산하지 않습니까?

select count(distinct a) from Applicant a where a.active = true
.

eclipseLink는 이것을 SQL에서 변환하고 Discriminator의 where 절을 추가합니다. JPQL은 엔티티와 영구 필드 / 속성과 함께 작동합니다.그들의 협회와 상속 계층 구조에 대해 알고 있습니다.JPQL은 테이블과 열 이름을 사용하지 않습니다.

(측면 참고 : 부울 필드의 경우 "예"를 사용하는 이유는 무엇입니까?)

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