3

我需要类似于此 SQL 查询的内容:

SELECT * FROM foo f ORDER BY GREATEST(f.bar_date, f.baz_date)

由于并非所有 RDBMS 系统都支持该GREATEST功能,理想情况下,我希望 JPA 实现为底层数据库生成正确的 SQL 查询。我的目标数据库是 Oracle、SQL Server 和 PostgreSQL。

4

3 回答 3

3

JPQL 允许 FUNCTION 运算符调用数据库函数。

Oracle 和 Postgres 支持 GREATEST,我认为 SQL Server 不支持,因此您可以编写自己的函数。

您还可以将 CASE 函数与 > 一起使用。

于 2013-09-17T13:58:59.917 回答
0

更具体地说,您可以在 JPQL 中使用该CASE语句执行此操作,该语句自 JPA 2.0 起受支持。为简洁起见,我省略了_date后缀。

SELECT * FROM foo f ORDER BY CASE WHEN f.bar > f.baz THEN f.bar ELSE f.baz END
于 2015-04-29T14:55:09.050 回答
0

我用过 CASE 功能。

通过标准构建器,它看起来像:

CriteriaQuery<?> query = ...
CriteriaBuilder builder = entityManager.getCriteriaBuilder();

query.orderBy(builder.selectCase().when(builder.greaterThan(pathToBarDate, pathToBazDate),pathToBarDate).otherwise(pathToBazDate));

在 JPQL 它应该看起来像

ORDER BY
     CASE WHEN (f.bar_date>f.baz_date) THEN f.bar_date
          ELSE f.baz_date
于 2016-09-29T08:31:17.637 回答