2013-12-19 14 views
15

JPQL名前付きクエリの選択クエリでは、どのように制限できますか?私は、クエリレベル自体ではなく、Javaの層で行われる制限が必要です! 私はJPQL制限クエリ

@NamedQueries(value = { 
     @NamedQuery(name = UserNotification.QueryName.NOTIFICATION_DISPLAYED, 
        query = "SELECT un FROM UserNotification un " + 
          "WHERE un.orgId IN (:orgList) " + 
          "AND un.user.id = :userId LIMIT 5") 

が、無駄にを使用しようとしています!

答えて

22

JPQLがクエリを制限するためのメカニズムを提供していないお勧めしてください。これは多くの場合、QuerysetMaxResults()メソッドを使用することで実現されます。これをJavaコードで指定しないでください。データベース内でクエリを含むビューを作成し、制限を実行することができます。次に、テーブルのようにエンティティをこのビューにマップします。

例:

List<String> resultList= query.setMaxResults(100).getResultList(); 
0

エンティティマネージャとクエリの実行中にだけ制限が必要とされる特定@NamedQueriesについて.setMaxResults(OBJのNO)

2

を書いていない、あなたは@NamedNativeQuery

に切り替えることができ
@NamedNativeQuery(
    name=UserNotification.QueryName.NOTIFICATION_DISPLAYED, 
    query="SELECT un.* FROM user_notification un " + 
     "WHERE un.user.id = ?1 LIMIT 5", 
    resultClass=UserNotification.class 
) 

スムーズではありませんが、仕事をしません。

16

spring-dataで作業している場合は、Pageable Interfaceを使用してください。以下のサンプルコード、

マイサービス、

import org.springframework.data.domain.Page; 
import org.springframework.data.domain.PageRequest; 

@Service 
public class MyModelService { 

    @Autowired 
    private MyModelRepository myModelRepository; 

    @Transactional 
    public Page<MyModel> findMyModelTop5() { 
     return myModelRepository.findMyModelTop5(new PageRequest(0, 5)); 
    } 
} 

私のリポジトリ、

import org.springframework.data.domain.Page; 
import org.springframework.data.domain.Pageable; 

@Repository 
public interface MyModelRepository extends JpaRepository<MyModel, Integer> { 

    @Query("SELECT mm FROM MyModel mm") 
    public Page<MyModel> findMyModelTop5(Pageable pageable); 

} 
+0

これは私が探していたまさにあり、そしてすべての検索を通じて、唯一のあなたは、これはそれを言及方法...ありがとう... –