sql - 如何将复杂的 SQL 转换为 HQL 或 JPQL 查询

标签 sql hibernate hql h2 jpql

我有一个 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/

相关文章:

mysql - 如何计算行的总值?

sql - 需要澄清 SQL Server 索引选择

java - 尝试在tomcat 9中加载maven项目,显示启动时子容器失败

java - JPA、JTA 中的逻辑工作单元和单一工作单元

mysql - Hibernate 按子表的 Id 排序

hibernate - GORM查询过滤器不是类的直接属性

c# - 从 C# 执行时获取 SQL 查询的成功消息

mysql - 我可以通过内连接更新表吗?

mysql - Jboss/MySQL 垂直部署的优缺点

java - Hibernate初学者疑惑