何时使用分离标准?我们通过使用分离标准而不是正常标准获得的优势是什么?
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Some.class);
DetachedCriteria criteria = DetachedCriteria.forClass(Some.class);
谢谢!
答案 0 :(得分:16)
根据docs
某些应用程序需要以“分离模式”创建条件查询, Hibernate会话不可用的地方。这个班可能是 在任何地方实例化,然后通过传递获得标准 与
getExecutableCriteria()
的会话。所有方法都有相同的 语义和行为作为Criteria的相应方法 接口
答案 1 :(得分:10)
'与会话对象分离'
分离标准可以在两种情况下使用:
不使用会话对象构建条件查询:
会话仅在执行查询/向数据库提交查询时要求,而不是在构建查询时。
例如:
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Department.class);
detachedCriteria.add(Restrictions.eq("DEPTID", 1));
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.property("DEPTID"));
detachedCriteria.setProjection(projectionList);
//Add more
.............................
在上面的代码中,您是否发现有必要使用会话对象来构建此类条件查询?绝对没有。
多次构建相同的条件查询:
无论会话对象如何,都可以构建一次,并且可以随时随地使用。
最后,当会话对象可用时,请使用上面的会话查询,如下所示:
detachedCriteria.getExecutableCriteria(session).list();