如何在JPA中编写此Oracle SQL子查询?

时间:2015-07-16 09:42:18

标签: java sql oracle hibernate jpa

我在JPA中编写以下Oracle SQL查询时遇到问题。

SELECT * FROM (SELECT * FROM bt_backup_main_status ORDER BY dates DESC) WHERE   
ROWNUM <= 5 AND flag = 1

逻辑非常简单。它选择标志为1的前5个最新日期行。

所以现在我想在JPA中编写这个查询。我试过以下代码。

String query = "SELECT i FROM (SELECT q FROM BtBackupMainStatus q ORDER BY q.dates DESC) i
                WHERE ROWNUM <= :rownum AND i.flag = :flag";
Query q = em.createQuery(query);
q.setParameter("rownum", 5);
q.setParameter("flag", 1);*/
List<BtBackupMainStatus> result = query.getResultList();

但这不起作用。

所以任何人都可以帮忙解决这个问题,我正在努力解决JPA问题。

它显示的错误是:

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: 
(near line 1, column 15 
[SELECT i FROM (SELECT q FROM com.verisk.backuptracker.model.BtBackupMainStatus q ORDER BY q.dates DESC) i WHERE ROWNUM <= :rownum AND i.flag = :flag]

提前致谢,

阿尼什

2 个答案:

答案 0 :(得分:0)

正如任何JPQL引用所说的那样,使用JPQL中存在的关键字并且不要创建自己的关键字(因为你不会在Java中这样做,所以为什么用查询语言?!)。由于您不提供课程,因此我们必须猜测哪些字段

print_r(array_replace($array1, array_intersect_key($array2, $array1)));

答案 1 :(得分:-1)

我们不能这样做因为(SELECT q FROM BtBackupMainStatus q)无法作为Entity处理。 HQL仅适用于使用hibernate映射的pojos(Entity)。所以我们可以在条件或共同相关的地方使用子查询 子查询。