Spring jpa jpql查询
Posted
技术标签:
【中文标题】Spring jpa jpql查询【英文标题】:Spring jpa jpql query 【发布时间】:2017-11-30 17:58:51 【问题描述】:我想知道是否可以通过 spring jpa 存储库执行 jpql 查询并能够使用分页作为排序功能,因为它可以通过 Example 和 Specification .我想做类似的事情:
findAll(String jpql, Pageable pageable)
QueryByExampleExecutor 接口即声明:
findAll(Example<S> example, Pageable pageable);
JpaSpecificationExecutor 接口声明:
Page<T> findAll(Specification<T> spec, Pageable pageable);
【问题讨论】:
【参考方案1】:根据Spring Data documentation,即使使用本机查询也应该是可能的。看一下示例 51:
public interface UserRepository extends JpaRepository<User, Long>
@Query(value = "SELECT * FROM USERS WHERE LASTNAME = ?1",
countQuery = "SELECT count(*) FROM USERS WHERE LASTNAME = ?1",
nativeQuery = true)
Page<User> findByLastname(String lastname, Pageable pageable);
似乎也可以按照documentation进行排序:
public interface UserRepository extends JpaRepository<User, Long>
@Query("select u from User u where u.lastname like ?1%")
List<User> findByAndSort(String lastname, Sort sort);
@Query("select u.id, LENGTH(u.firstname) as fn_len from User u where u.lastname like ?1%")
List<Object[]> findByAsArrayAndSort(String lastname, Sort sort);
【讨论】:
感谢您的回答,但我一直在寻找的是动态创建查询并在代码中调用存储库,您的替代方案需要已经预定义的查询 即时编写 JPQL,可能有问题。 JPQL 在运行时编译,但仅在类加载阶段编译,因此如果您有错误,您的存储库将不会加载。这是一个很好的安全措施。您可以尝试使用 Criteria Query 代替:***.com/questions/28874135/…以上是关于Spring jpa jpql查询的主要内容,如果未能解决你的问题,请参考以下文章
Spring JPA 和 Hibernate 的 JPQL 查询错误
没有 JPQL 查询的 Spring-data-jpa 中的 CURRENT_DATE
如何在 JPQL(Spring JPA 查询)中使用 JOIN 执行 UPDATE 语句?
无法在 FROM 子句中使用子查询编写 JPQL 查询 - Spring Data Jpa - Hibernate