如何在没有实体管理器的情况下使用 JPA setMaxResults() (LIMIT 20)?
How to Use JPA setMaxResults() (LIMIT 20) Without Entity Manager?
我目前有以下 JPA 设置:
com.example.entities.Employee
com.example.repository.EmployeeRepository
com.example.controllers.EmployeeController
应用程序设置指向 SQL 服务器并且控制器具有没有问题的端点(即“/getEmployees”)。
但是,我想限制返回的员工人数。
使用 JPA 后,我没有使用许多教程建议的任何 entityManager 代码。
相反,我在存储库中使用以下设计模式:
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)
有什么想法吗?
HQL 不支持 LIMIT 功能,所以这里有 2 个选项:
- 使用本机 SQL 查询
- 使用 entityManager 和 setMaxResults
如何在 Spring 数据中使用 Pageable 接口?
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();
}
我目前有以下 JPA 设置:
com.example.entities.Employee
com.example.repository.EmployeeRepository
com.example.controllers.EmployeeController
应用程序设置指向 SQL 服务器并且控制器具有没有问题的端点(即“/getEmployees”)。
但是,我想限制返回的员工人数。
使用 JPA 后,我没有使用许多教程建议的任何 entityManager 代码。
相反,我在存储库中使用以下设计模式:
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)
有什么想法吗?
HQL 不支持 LIMIT 功能,所以这里有 2 个选项:
- 使用本机 SQL 查询
- 使用 entityManager 和 setMaxResults
如何在 Spring 数据中使用 Pageable 接口?
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();
}