为什么hibernate中的Property API在(Criteria subselect)中有方法?

时间:2012-01-24 04:23:29

标签: java hibernate

我的遗留项目中有以下代码段

  DetachedCriteria subCriteria = DetachedCriteria.forClass(Employee.class);
  subCriteria.setProjection(Projections.distinct(Property.forName ("department.departmentId"))).add(Property.forName("departmentName").eq(departmentName));
  Criteria criteria = getCriteria();
  Property.forName("departmentId").in(subCriteria)

我的问题是我们在Property API中有以下方法(DetachedCriteria subselect)为什么不在(Criteria subselect)中使用方法?我确信背后会出现一些原因但不知怎的,我没有得到这个?我之所以这样说,我们应该能够将另一个Criteria作为subselect而不是DetachedCriteria。

编辑: - 我希望如何创建subCriteria,因为我此时已有会话,所以我没有必要使用DetachedCriteria

  Criteria subCriteria1 =session.createCriteria(Employee.class);   
  subCriteria1.setProjection(Projections.distinct(Property.forName("department.departmentId"))).add(Property.forName("departmentName").eq(departmentName));
 Criteria criteria = getCriteria();
  Property.forName("departmentId").in(subCriteria1)

但是subCriteria1在这里是不可接受的,因为预期只有DetachedCriteria作为方法参数。为什么Criteria参数也不允许与DetachedCriteria一起使用?

1 个答案:

答案 0 :(得分:1)

因为标准被绑定到一个会话,所以没有分离。

如果使用其他会话创建子标准,会发生什么?应该使用哪种方言,拦截器,查询替换等?