使用JPQL/JPA时如何使用date_format

How to use date_format when using JPQL/JPA

我正在做 Java EE,使用 MySQL 作为数据库,并在我的代码上实现 JPA。

我从 MySQL Workbench 检索数据没问题,但是当我将语法更改为 JPQL 时,它不起作用。

例如在 MySQL - 有效

SELECT date_format(s.date,'%Y, %m, %d') from Transactions s;

在 JPQL 中 - 它不会

SELECT date_format(s.date,'%Y, %m, %d') from TransactionEntity s;

如何修改以适应 JPA 查询?

注意: 在 JPQL 中,以下作品

SELECT s.date from TransactionEntity s;

SQL 函数 date_format 不是 JPQL 的一部分,正如任何文档都会告诉您的那样,所以不要将 SQL 推入 JPQL 并期望它执行工作。

您可以使用 JPA 2.1 执行如下调用它

function("date_format", s.date, '%Y, %m, %d')

其中 function 是一种调用任何本机 SQL 函数的方法。这显然意味着您失去了数据库独立性,因为该功能并非对所有数据存储都有效。

Sql 函数在 JPQL 中可用。我的 JPA 版本是 1.11.9。按天查询的示例工作组:

@Query(value = "SELECT count(ac) as count, function('date_format', max(ac.subscriptionStartDate), '%Y, %m, %d') as date FROM MyTable ac " +
        "WHERE ac.subscriptionStartDate BETWEEN :startDate AND :endDate GROUP BY function('date_format', ac.subscriptionStartDate, '%Y, %m, %d')")
public List<Map<String,Object>> findRegisteredCustomersHistory(@Param("startDate") Date startDate, @Param("endDate") Date endDate);

查询的结果是一个列表,它以格式化的形式记录了按天分组的记录数。

示例行:

count: 3, date: 2019, 09, 10
count: 1, date: 2019, 09, 11

对于您的问题,请在 JPQL 中试试这个:

@Query(value = "SELECT function('date_format', s.date, '%Y, %m, %d') as date from Transactions s;")