得到?使用HibernateCriteria子查询时代替ID

时间:2014-05-02 16:42:55

标签: hibernate hibernate-criteria

在使用hibernate Criteria进行内部查询时,我遇到了一个奇怪的问题。

以下是代码段。

Criteria criteria = session.createCriteria(Restaurant.class);
criteria.addOrder(Order.asc("nid"));
DetachedCriteria innerIDs = DetachedCriteria.forClass(InnerTable.class).setProjection(Property.forName("tempId") );
criteria.add(Subqueries.in("id", innerIDs));
criteria.list()

以上代码将SQL脚本生成为:

1.    SELECT columns names
2.    FROM table name
3.    WHERE   ? IN (SELECT   this_.TEMP_ID AS y0_ FROM   global_temp_id this_)

在#3行中,我得到了?而不是获取列名? (问号)。我甚至尝试将Property.forName(" id")放在Subqueries.in而不是#34; id"仍然是同一个问题。

  

我没有在hbm.xml文件中映射这两个表的任何关系。

1 个答案:

答案 0 :(得分:2)

你看到的是正常的。 Criteria查询转换为使用预准备语句执行的SQL查询。 id是语句的参数。

如果要选择ID在子查询中的餐馆,则需要

criteria.add(Subqueries.propertyIn("id", innerIDs));

the javadoc所示,in()将第一个参数视为字面值:

  

创建一个标准,用于检查文字的值是否为子查询结果中的值。