java - Hibernate 中使用 Criterion 的嵌套查询

标签 java database hibernate criteria hibernate-criteria

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

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

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

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

我使用了以下代码

    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();

最佳答案

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

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

关于java - Hibernate 中使用 Criterion 的嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24796225/

相关文章:

java - 在java中连续循环查询数据库

database - 致命 : invalid value for parameter "TimeZone": "Australia/Canberra"

c# - NHibernate - 没有显式更新的意外更新

java - OSCache 正在开发中还是已经停产?

java - @class 被添加,即使它是 defaultImpl

java - 导入新 Gradle 项目失败 : Could not fetch model of type 'IdeaProject'

java - 第一个 JFrame 应该使用 'invokeLater' 创建还是可以直接从 main 创建?

MySQl 在插入和更新同一个表时触发错误(错误代码 : 1064)

hibernate firebird - 创建新表

java - 想法 : Embed data/DSLs in Java as comments and generate Java code with APT