2012-06-18 4 views
1

I했습니다 이러한 속성을 가진 테이블과 자바 엔티티 :JPQL : 최신 아이템을 얻을

알림

-Id

-scope

-activity

-user

-creat ionTime

-readTime (널 (null) -> 새 메시지)

어떻게 하나 JPQL 문 범위와 활동에 따라 최신 알림을받을 수 있나요? JPA (버전 1.0, 사용 가능한 Criteria API 없음)는 "SELECT TOP"또는 명령문의 LIMIT 연산자 (Entity Manager (em.setmax ...)에서만 사용 가능)를 지원하지 않기 때문에 솔루션을 찾을 수 없습니다. Is 하나의 JPQL 문만 사용하여이 작업을 수행 할 수있는 방법이 있습니까? 이 retrun해야

Notification 1 
-Id:1 
-scope:test 
-activity:1 
-user:user1 
-cTime: 01.01.1999 

Notification 2 
-Id:2 
-scope:test 
-activity:1 
-user:user1 
-cTime: 02.02.2000 


Notification 3 
-Id:3 
-scope:dev 
-activity:2 
-user:user1 
-cTime: 01.01.1997 

: 당신은 아래의 쿼리를 시도 할 수 있습니다 알림이 및

답변

0

3의 순서를 변경할 수 있습니다

이 예 ... 를 사용하여 네이티브 SQL은 LIMIT를 얻기 위해 또는 TOP는 해결책입니다 그에 따라 필드. here을 참조 객체 어레이가되므로 쿼리 결과를 입수

//-- MAX_RESULT_SIZE is the number of results to be fetched 
entityManager.createQuery("SELECT n.scope, n.activity, MAX(n.Id) FROM Notification n GROUP BY n.scope, n.activity ORDER BY n.cTime DESC").setMaxResults(MAX_RESULT_SIZE); 

.

+0

죄송합니다. 문제가 해결되지 않는 경우 ... 예제를 참조하십시오. 엔티티를 그룹화 한 다음 모든 그룹에 대해 최신 항목을 가져와야합니다 ... – mischu

+0

@mischu 업데이트 된 답변을 참조하십시오. –

+0

나는 이것이 해결책이 아니라고 생각한다. ID를 그룹화하는 것은 의미가 없습니다 ... 또한 "n.scope, n.activity, n.Id"가 아닌 em에서 엔티티가 필요합니다 .... – mischu