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

问题描述

我有一个sql命令,该命令使用H2数据库具有多个选择,功能和联接。我需要将其转换为JPQL。

val test = test()
val testToJson = test.toJsonTestClass() //<- This is where the error is pointing to.

println(testToJson)

可以帮忙吗?

解决方法

对于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