【发布时间】:2014-04-01 11:54:23
【问题描述】:
在我的 Java Web 应用程序中,我使用 Postgresql,并且一些数据表会自动填充到服务器中。在数据库中,我有一个如下所示的 STATUS 表:
我想选择与所选日期之间的车辆相关的数据以及车辆保持连接的位置。只是我想选择上表中绿色的数据,这意味着我完全想要第一个 io1=true 时的数据和最后一个 io1=true 之后的 io1=false 时的数据。我有 postgresql 查询语句,它准确地给了我想要的数据;但是,由于我的应用程序逻辑,我必须将其转换为 HQL。
工作 postgresql 查询:
WITH cte AS
( SELECT iostatusid, mtstrackid, io1,io2,io3, gpsdate,
(io1 <> LAG(io1) OVER (PARTITION BY mtstrackid
ORDER BY gpsdate)
) AS status_changed
FROM iostatus
WHERE mtstrackid = 'redcar' AND gpsdate between '2014-02-28 00:00:00' and '2014-02-28 23:59:59'
)
SELECT iostatusId, mtstrackid, io1, io2, io3,gpsdate
FROM cte
WHERE status_changed
OR io1 AND status_changed IS NULL
ORDER BY gpsdate ;
我应该如何将上述查询转换为 HQL,或者如何使用 HQL 检索所需的数据?
【问题讨论】:
-
您可以使用本机查询调用数据库。然后你可以使用上面的代码。我怀疑这里的任何人都会将其翻译成 HQL,如果您提供了足够的信息也是值得怀疑的。
-
ClassCastException. -
我不认为 HQL 支持通用表表达式甚至窗口函数。它只支持最基本的SQL语句。
-
那么,我怎样才能检索到所需的数据呢?你有什么建议吗?谢谢
标签: java hibernate postgresql