我的遗留项目中有以下代码段
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一起使用?
答案 0 :(得分:1)
因为标准被绑定到一个会话,所以没有分离。
如果使用其他会话创建子标准,会发生什么?应该使用哪种方言,拦截器,查询替换等?