sse*_*ano 34
该分离的标准允许你创建无查询Session.然后,您可以在任意会话中执行搜索.
实际上,在使用detached criteria另一个或新的会话时(无缓存和会话的创建),您应该仔细考虑.
它们对于连接条件,子选择以及在当前会话外查询最有用.
另一个常见用途是代码重用.许多开发人员将它们声明为 static查询并使用不同的底层会话执行它们DAO.
tak*_*eek 11
使用DetachedCriteria与Criteria完全相同,除了您可以在不访问会话的情况下进行查询的初始创建和设置.在运行查询时,必须将其转换为可执行查询getExecutableCriteria(session).
如果您正在构建复杂的查询(可能是通过多步骤过程),这非常有用,因为您无需在任何地方访问Session.运行查询时,最后一步只需要Session.
在引擎盖下,DetachedCriteria使用CriteriaImpl,它与您调用时所获得的类相同session.createCriteria().
-当休眠会话不存在时,分离标准是非常好的替代方案。
- 标准是在线的,这意味着它使用Session类对象。但分离的标准是离线的,因为它不需要会话。
-然后分离标准允许代码可重用性。
public static void main(String [] args) throws Exception {
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.configure("hibernate.cfg.xml");
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
System.out.println("By using criteria");
Criteria cr=session.createCriteria(Student.class);
cr.add(Restrictions.eq("gender", "male"));
cr.addOrder(Order.asc("stud_id"));
List<Student> res=((Criteria) cr).list();
for(int i=0;i<res.size();i++)
{
System.out.print( res.get(i).getStud_id()+"\t");
System.out.println(res.get(i).getName());
}
System.out.println("\n\nBy using Detached criteria");
DetachedCriteria dcr = DetachedCriteria.forClass(Student.class).add(Property.forName("gender").eq("male"));
dcr.addOrder(Order.desc("stud_id"));
List<Student> results = dcr.getExecutableCriteria(session).list();
for(int i=0;i<results.size();i++)
{
System.out.print( results.get(i).getStud_id()+"\t");
System.out.println(results.get(i).getName());
}
Run Code Online (Sandbox Code Playgroud)
单击此处获取实施说明。
| 归档时间: |
|
| 查看次数: |
42520 次 |
| 最近记录: |