我有一个 SQL 命令,它有多个选择、函数和使用 H2 数据库的连接。我需要将其转换为 JPQL。
SELECT TotalHours, ROUND(PRICE*TotalHours, 2) AS TotalPayment, PLATE_NUM, CUSTOMER_ID FROM (
SELECT (DATEDIFF(s, TIMESTAMP'2020-07-29 16:00:00', TIMESTAMP'2020-08-10 07:00:00') / 3600.0) AS TotalHours, c.PRICE, b.PLATE_NUM, b.CUSTOMER_ID
from BOOKING b inner join CAR c on b.PLATE_NUM = c.PLATE_NUM
) AS x;
你能帮忙吗?
最佳答案
这个查询对于 JPQL 来说太复杂了。但是您可以将其作为 native SQL query 来执行.您的持久性提供程序(似乎是 Hibernate)会将语句直接发送到数据库。因此,您可以使用数据库支持的所有 SQL 功能,但如果您需要支持不同的 DBMS,则需要自己处理不同的 SQL 方言。
em.createNativeQuery("SELECT TotalHours, ROUND(PRICE*TotalHours, 2) AS TotalPayment, PLATE_NUM, CUSTOMER_ID FROM (SELECT (DATEDIFF(s, TIMESTAMP'2020-07-29 16:00:00', TIMESTAMP'2020-08-10 07:00:00') / 3600.0) AS TotalHours, c.PRICE, b.PLATE_NUM, b.CUSTOMER_ID from BOOKING b inner join CAR c on b.PLATE_NUM = c.PLATE_NUM) AS x");
如果要将查询结果映射到DTO对象,可以使用@SqlResultSetMapping。请参阅:https://thorben-janssen.com/result-set-mapping-constructor-result-mappings
关于sql - 如何将复杂的 SQL 转换为 HQL 或 JPQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63436583/