【问题标题】:Nested Query in Hibernate using Criterion使用标准的 Hibernate 中的嵌套查询
【发布时间】:2014-09-07 21:25:55
【问题描述】:

我有一个以下查询,我必须从子查询创建的临时表中选择行。

select x, y, x 
from (select x, y, z from some_table where x between x1 and x2) 
where y like 'y1' 
order by z by desc

我必须使用标准从数据库中获取结果

我已经浏览了几个使用标准和分离标准处理子查询的示例和文档。我使用了 Detached 查询,但它没有达到目的,或者我遗漏了一些东西。

我使用了以下代码

    DetachedCriteria subCriteria =  
                      DetachedCriteria.forClass(SomeClass.class)
                     .add(Restrictions.between("x","x1","x2"))  
                     .setProjection(Projections.projectionList()
                     .add(Projections.property("x"))
                     .add(Projections.property("y"))
                     .add(Projections.property("z"));

   List<Object[]> results = session
                .createCriteria(Program.class)
                .add(Subqueries.exists(subCriteria))
                .add(Restrictions.like("y", "y1"))
                .addOrder(Order.desc("z")).list();

【问题讨论】:

  • 除非您发布您尝试过的内容,否则很难知道哪些内容不适合您,我指的是您的 Criteria 和 DetachedCriteria 声明
  • 这必须用 Hibernate 完成吗?对我来说,这似乎是纯 SQL 的完美用例。另外,为什么要派生表?在您的示例中,实际上不需要嵌套该查询...
  • @James ..我已经编辑了问题
  • @Lukas ..我知道它可以通过普通 SQL 使用,但我必须使用 Hibernate。

标签: java database hibernate criteria hibernate-criteria


【解决方案1】:

HQL 或 JPQL 都不支持“派生表表达式”。您可以使用子选择或in-selects,仅此而已。

这次您需要使用本机查询,这实际上是正确的做法。当您想要获取实体而不是投影时,HQL/JPQL 最有用。

【讨论】:

  • 最后我选择了原生查询。。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多