繁体   English   中英

Spring JPA休眠查询生成器

[英]Spring JPA hibernate query builder

我只是想动态创建查询。我只想指定将在哪一列中进行排序,并使用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 orderByOrder按类型ASCDESC顺序

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

代替扩展CrudRepository而是扩展PagingAndSortingRepository findAll方法可以满足您的目的。 PageRequestPageable的实现。 您可以指定限制,偏移量和排序详细信息。 查看本文以了解有关用法的更多信息。 您可能不需要使用这种方法进行本机查询。

为什么不使用PostgreSQL内部的存储过程并传递参数,该参数提到要对哪一列进行排序并将Limit参数传递给它。 有关更多信息,请参考此处

您可以像这样调用存储过程:

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

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM