여기는 특별한 경우이지만 자신 만의 작품을 만들 수있는 영감을 줄 수 있습니다. 목표는 레코드가 특정 기준을 충족시키는 두 개의 다른 테이블에서 레코드의 총 수를 세는 것입니다. 이 기술은 여러 테이블/소스에서 데이터를 집계해야하는 모든 경우에 사용할 수 있다고 생각합니다.
특수 중간 클래스 설정이 있으므로 명명 된 쿼리를 호출하는 코드는 짧고 빠르지 만 일반적으로 명명 된 쿼리와 함께 사용하는 방법을 사용하여 쿼리를 실행할 수 있습니다.
@Entity
@NamedQueries({
@NamedQuery(
name ="PIXEL_ALL",
query = "" +
" SELECT new SourceCount(" +
" (select count(a) from PIXEL_LOG_CURR1 a " +
" where to_char(a.TIMESTAMP, 'YYYYMMDD') = :PROCDATE " +
" )," +
" (select count(b) from PIXEL_LOG_CURR2 b" +
" where to_char(b.TIMESTAMP, 'YYYYMMDD') = :PROCDATE " +
" )" +
") from Dual1" +
""
)
})
public class SourceCount {
@Id
private Long COUNT;
public SourceCount(Long COUNT1, Long COUNT2) {
this.COUNT = COUNT1+COUNT2;
}
public Long getCOUNT() {
return COUNT;
}
public void setCOUNT(Long COUNT) {
this.COUNT = COUNT;
}
}
여기에 마법의 일부는 더미 테이블을 만들고으로 하나 개의 레코드를 삽입하는 것입니다 : 당신이 여기에서 볼 수 있듯이
는
QueryParms parms=new QueryParms();
parms.put("PROCDATE",PROCDATE);
Long pixelAll = ((SourceCount)Fetch.row("PIXEL_ALL",parms,logger)).getCOUNT();
, 명명 된 쿼리는 노동 조합 문 같은 aweful 많이 찾기 시작합니다 그것. 필자의 경우 데이타베이스가 오라클이기 때문에 이름을 dual1로 지정했지만 더미 테이블이라고 부르는 것이 중요하지는 않습니다.
@Entity
@Table(name="DUAL1")
public class Dual1 {
@Id
Long ID;
}
이 더미 레코드를 삽입하는 것을 잊지 마세요 : [여기] 설명 (솔루션의
SQL> insert into dual1 values (1);
하나는 집계 개체를 사용하는 것입니다, http://stackoverflow.com/questions/ 7322526/hibernate-jpa-it-possible-to-retrieve-heterogeneous-entities-in-a-single-que/7322738 # 7322738). –