2017-05-23 8 views
1

私は現在、以下のJPAのセットアップを持っている:JPAを使用する方法setMaxResults()(LIMIT 20)Entity Managerなし?

com.example.entities.Employee 
com.example.repository.EmployeeRepository 
com.example.controllers.EmployeeController 

アプリケーション設定は、SQLサーバーを指しているとコントローラが問題なくエンドポイント(すなわち「/のGetEmployees」)を有しています。

しかし、私は戻ってくる従業員の数を制限したいと思います。

JPAを使用した後、多くのチュートリアルでは、エンティティマネージャコードを使用していません。

代わりに、私は、リポジトリ内の次のデザインパターンを使用しています:

com.example.repository.EmployeeRepository以下

package com.example.repository; 

import java.util.List; 

import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.data.jpa.repository.Query; 
import org.springframework.stereotype.Repository; 

import com.example.entities.Employee; 

@Repository 
public interface EmployeeRepository extends JpaRepository<Employee, Long> { 

    @Query("SELECT " 
     + "e.eid, " 
     + "e.firstname, " 
     + "e.lastname, " 
     + "e.dept) " 
     + "FROM Employee e") 
    public List<Employee> getAllEmployees(); 

} 

は、エンドポイントのコントローラファイルのコピーです:

com.example.controllers.EmployeeController

package com.example.controllers; 

import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody; 

import com.example.entities.Employee; 
import com.example.repository.EmployeeRepository; 

@Controller 
public class EmployeeController { 

    @Autowired 
    EmployeeRepository empRepo; 

    @RequestMapping(name = "/getAllEmployees") 
    public @ResponseBody List<Employee> getAllEmployees() { 
     return empRepo.getAllEmployees(); 
    } 

} 

これらのファイルにはというentityManagerはありませんので、抽象的な状況になり、明示的に使用することなくsetMaxResults(20)メソッドをどこで開始するのか分かりません。 entityManager

私ははsetMaxResults機能は通常、クエリオブジェクトに接続されていることに気付きました:

q.setMaxResults(n) 

任意のアイデア?

+0

あなただけの 'LIMIT 20'のようなものを追加するためのクエリを変更することはできますか? – csmckelvey

+0

あなたはEntityManagerを使用していないので、JPA APIを使用していないので、Spring Data JPA APIを使用しています。タグ –

+0

@csm_dev JPQLに "LIMIT"というキーワードがないと意味がない場合 –

答えて

2

をどのように春のデータでページング可能インターフェースを使用する方法について?お使いのコントローラで

package com.example.repository; 

import java.util.List; 

import org.springframework.data.jpa.repository.JpaRepository; 
import org.springframework.data.jpa.repository.Query; 
import org.springframework.stereotype.Repository; 
import org.springframework.data.domain.Page; 
import org.springframework.data.domain.Pageable 

import com.example.entities.Employee; 

@Repository 
public interface EmployeeRepository extends JpaRepository<Employee, Long> { 

    @Query("SELECT " 
     + "e.eid, " 
     + "e.firstname, " 
     + "e.lastname, " 
     + "e.dept) " 
     + "FROM Employee e") 
    public Page<Employee> getAllEmployees(Pageable pageable); 

} 

あなたが取得したいのですがどのように多くの項目を設定することができます

@RequestMapping(name = "/getAllEmployees") 
public @ResponseBody List<Employee> getAllEmployees() { 
    return empRepo.getAllEmployees(new PageRequest(0, 20)).getContent(); 
} 
+0

これは実際にうまくいきました。ありがとうございました。 –

1

HQLはLIMIT機能をサポートしていませんので、あなたは、2つのここでのオプションがあります。

  • 使用ネイティブSQLクエリ
  • 使用のEntityManagerとはsetMaxResults
関連する問題