何时在hibernate中使用分离标准?

时间:2012-01-19 12:22:17

标签: hibernate

何时使用分离标准?我们通过使用分离标准而不是正常标准获得的优势是什么?

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Some.class);


DetachedCriteria criteria = DetachedCriteria.forClass(Some.class);

谢谢!

2 个答案:

答案 0 :(得分:16)

根据docs

  

某些应用程序需要以“分离模式”创建条件查询,   Hibernate会话不可用的地方。这个班可能是   在任何地方实例化,然后通过传递获得标准   与getExecutableCriteria()的会话。所有方法都有相同的   语义和行为作为Criteria的相应方法   接口

答案 1 :(得分:10)

'与会话对象分离'

分离标准可以在两种情况下使用:

  1. 不使用会话对象构建条件查询:
    会话仅在执行查询/向数据库提交查询时要求,而不是在构建查询时。

    例如:

        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
        .............................
    

    在上面的代码中,您是否发现有必要使用会话对象来构建此类条件查询?绝对没有。

  2. 多次构建相同的条件查询:
    无论会话对象如何,都可以构建一次,并且可以随时随地使用。

  3. 最后,当会话对象可用时,请使用上面的会话查询,如下所示:

    detachedCriteria.getExecutableCriteria(session).list();