【问题标题】:Spring JPA hibernate query builderSpring JPA 休眠查询构建器
【发布时间】:2018-08-30 01:54:10
【问题描述】:

我只是想动态创建查询。意思是我只想指定排序将在哪一列中进行,并将排序类型为ASC or DESC 也使用此查询我必须限制记录数。我在这里使用 PostgreSQL。所以在查询中我应该指定 limit 和 offset

所以我将 sense 属性中的四个变量发送到接口。

WorkflowDetailsInterface.java

@Configuration
public interface WorkflowDetailsInterface extends CrudRepository<WorkflowDetails, Integer> {
@Query(value ="SELECT workflow_id, workflow_name, workflow_description, workflow_definition, "
        + "camunda_workflow_json, camuda_deployment_id, camunda_status,diagnostic_flag, "
        + "active, del_flag  FROM workflow  ORDER BY :orderByColoumn  : orderByOrder LIMIT  :recordCountLimit OFFSET :startLimit",nativeQuery = true)
    List<WorkflowDetails> listWorkflowName(@Param("startLimit") int startLimit,
            @Param("recordCountLimit")int recordCountLimit,@Param("orderByColoumn")String orderByColoumn,
            @Param("orderByOrder")String orderByOrder);
}

这里, @Param("startLimit") int startLimit 将是起点 @Param("recordCountLimit")int recordCountLimit 这是偏移量 @Param("orderByColoumn")String orderByColoumn 按列名排序 @Param("orderByOrder")String orderByOrderASCDESC

类型排序

如何将这些变量动态绑定到我的 JPA 查询

【问题讨论】:

    标签: java sql postgresql hibernate spring-data-jpa


    【解决方案1】:

    为什么不使用 PostgreSQL 中的存储过程并传递参数来说明要排序的列并将 Limit 参数传递给它。更多信息请参考here

    你可以这样调用存储过程:

    String sql ="call <stored_procedure_name>(:parameter1)";
    @SuppressWarnings("deprecation")
    Query query = sessionFactory.getCurrentSession().createNativeQuery(sql).addEntity(<your persistant>.class).setParameter("parameter1", <your param>);
    

    希望对你有帮助。

    【讨论】:

      【解决方案2】:

      而不是扩展CrudRepository 扩展PagingAndSortingRepository。 'findAll' 方法为您服务。 PageRequestPageable 的实现。您可以指定限制、偏移和排序详细信息。检查此article 以了解有关使用情况的更多信息。您可能不需要使用这种方法进行本机查询。

      【讨论】:

        猜你喜欢
        • 2018-07-25
        • 1970-01-01
        • 1970-01-01
        • 2012-07-30
        • 2020-11-13
        • 1970-01-01
        • 1970-01-01
        • 2010-09-08
        • 1970-01-01
        相关资源
        最近更新 更多