如何在Java中与CriteriaBuilder一起使用sql函数?

如何在Java中与CriteriaBuilder一起使用sql函数?,java,hibernate,jpa,Java,Hibernate,Jpa,如何在Java持久化中使用converttz函数和CriteriaBuilder?我可以将其与Hibernate HQL一起使用,如下所示: "and CONVERT_TZ(PR.validFrom,'"+serverTZ+"','"+clientTZ+"') >= ?" 当前CriteriaBuilder如下所示: "and CONVERT_TZ(PR.validFrom,'"+serverTZ+"

如何在Java持久化中使用
converttz
函数和
CriteriaBuilder
?我可以将其与Hibernate HQL一起使用,如下所示:

"and CONVERT_TZ(PR.validFrom,'"+serverTZ+"','"+clientTZ+"') >= ?"
当前
CriteriaBuilder
如下所示:

"and CONVERT_TZ(PR.validFrom,'"+serverTZ+"','"+clientTZ+"') >= ?"
criteria.add(
cb.greaterThanOrEqualTo(
root.get(“执行日期”),
historyCriteria.getStartDate()
)
);

您可以尝试使用以下方法:

ParameterExpression serverTZ=cb.parameter(String.class);
ParameterExpression clientTZ=cb.parameter(String.class);
ParameterExpression startDate=cb.parameter(LocalDateTime.class);
cb.和(
cb.greaterThanOrEqualTo(
cb.功能(
“转化”,
LocalDateTime.class,
root.get(“执行日期”),
瑟弗茨,
克利恩茨
),起始日期
),
// ...
);
entityManager.createQuery(条件)
.setParameter(serverTZ,“GMT”)
.setParameter(clientz,“MET”)
.setParameter(startDate、LocalDateTime.of(…))
.getResultList();

感谢您的解决方案。我对使用CriteriaBuilder知之甚少。您能告诉我如何在函数中指定列名(“executionDate”)以及如何设置参数吗?我已经更正了答案。
root.get(“executionDate”)
应作为函数的第一个参数传递。我只是忘了加上它。