使用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;")
我正在做 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;")