[英]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
按类型ASC或DESC顺序
我如何将这些变量动态绑定到我的JPA查询
代替扩展CrudRepository
而是扩展PagingAndSortingRepository
。 findAll方法可以满足您的目的。 PageRequest是Pageable的实现。 您可以指定限制,偏移量和排序详细信息。 查看本文以了解有关用法的更多信息。 您可能不需要使用这种方法进行本机查询。
为什么不使用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.