动态SELECT和WHERE子句

时间:2019-05-17 11:35:40

标签: sql postgresql spring-boot

我们在Spring Boot应用程序中有一个要求,要求使用动态SELECT子句和WHERE子句生成查询。用户将在运行时选择特定的列,并且仅需要获取那些列。如何做到这一点? 就搜索动态查询而言,我可以理解可以为WHERE子句完成动态部分。但是,不确定如何动态执行SELECT子句。

编辑添加示例: 表格包含columns idnamerolesalary

查询:

select id, name from Table Where role = 'Admin';

这里WHERE clause (role = Admin)和要成为selected(id, name)的列仅在运行时已知。

1 个答案:

答案 0 :(得分:0)

使用类似这样的东西

final CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
final CriteriaQuery<T> criteriaQuery = criteriaBuilder.createQuery(getDomainClass());
final Root<T> root = criteriaQuery.from(getDomainClass());

criteriaQuery.select(root);
ParameterExpression<Integer> p = criteriaBuilder.parameter(Integer.class);
criteriaQuery.where(criteriaBuilder.gt(root.get("<whatever>"), p));

final TypedQuery<T> query = em.createQuery(criteriaQuery);
return query.getResultList();

如果这不符合您的想法,请查看这篇帖子Really dynamic JPA CriteriaBuilder