在使用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文件中映射这两个表的任何关系。
答案 0 :(得分:2)
你看到的是正常的。 Criteria查询转换为使用预准备语句执行的SQL查询。 id是语句的参数。
如果要选择ID在子查询中的餐馆,则需要
criteria.add(Subqueries.propertyIn("id", innerIDs));
如the javadoc所示,in()
将第一个参数视为字面值:
创建一个标准,用于检查文字的值是否为子查询结果中的值。