【问题标题】:Spring jpa jpql querySpring jpa jpql查询
【发布时间】:2017-11-30 17:58:51
【问题描述】:

我想知道是否可以通过 spring jpa 存储库执行 jpql 查询并能够使用分页作为排序功能,因为它可以通过 ExampleSpecification .我想做类似的事情:

findAll(String jpql, Pageable pageable)

QueryByExampleExecutor 接口即声明:

findAll(Example<S> example, Pageable pageable);

JpaSpecificationExecutor 接口声明:

Page<T> findAll(Specification<T> spec, Pageable pageable);

【问题讨论】:

    标签: java spring spring-data-jpa jpql


    【解决方案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 代替:stackoverflow.com/questions/28874135/…
    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2015-12-23
    • 1970-01-01
    • 2015-03-18
    • 2018-07-14
    • 2017-11-28
    相关资源
    最近更新 更多