`
jefferson
  • 浏览: 279714 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

关于条件查询detachedCriteria--关联查询

阅读更多
文章转自http://www.blogjava.net/caixuetao/articles/60631.html假设要通过stuName查询一个学生Student记录,可以如下:  DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
    dc.add(Restrictions.like("stuName", stuName, MatchMode.ANYWHERE));
     
如果要通过Student的Team的teamName查询一个Student记录,很多人都会这么写:
DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
    dc.add(Restrictions.like("team.teamName", teamName, MatchMode.ANYWHERE));
     
遗憾的是上述程序报错,说是在Student中找不到team.teamName属性,这是可以理解的。那么如何通过teamName查找Student呢?
可以这么写:
DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
    dc.createAlias("team", "t");
    dc.add(Restrictions.like("t.teamName", teamName, MatchMode.ANYWHERE));
      没错,就是要先建立team的引用,才能用team导航到teamName。

这里有一个特殊情况,如果是对引用对象的id查询,则可以不用建立引用,也就是可以不调用createAlias()语句,如下所示:
DetachedCriteria dc = DetachedCriteria.forClass(Student.class);
    dc.add(Restrictions.like("team.id", teamId, MatchMode.ANYWHERE));
      据我个人的经验,team后只能跟其主键属性,比较其他属性要用别名。此主键属性可以用“id”字符来指代,也可以用team的主键属性来指代。换句话说,我的Student类的类主键“stuId”,不管是在HQL还是在QBC中,都可以用stu.id来指代stu.stuId。在这里可以看出“id”字符的特殊性。上述是个人观点,并未得到确实的证实。

分享到:
评论
3 楼 src_bord 2009-10-30  
呵呵  今天我碰到这问题了 谢谢拉
2 楼 madcow 2009-03-03  
照你这样子做了,然后提示错误:No configuration found. Configuring ehcache from ehcache-failsafe.xml found in the classpath: jar:file:/D:/myeclipse/myeclipse/eclipse/plugins/com.genuitec.org.hibernate.eclipse_5.1.1/myeclipse-data/3.0/lib/ehcache-1.1.jar!/ehcache-failsafe.xml
1 楼 anlongstar 2008-03-27  
good, thank you

相关推荐

    DetachedCriteria查询

    DetachedCriteria 查询 DetachedCriteria 是 Hibernate 中的一种离线查询对象,它可以在不依赖 Session 的情况下生成动态 SQL 语句并进行查询。下面是 DetachedCriteria 查询的详细知识点: 创建 DetachedCriteria...

    Hibernate 使用DetachedCriteria操作

    在DetachedCriteria中定义的查询条件可以在稍后的时间点附加到Session上执行,这使得查询可以脱离当前的Session状态,因此得名“Detached”。这种特性在处理复杂的、跨多个事务的查询时非常有用,同时也可以避免因长...

    DetachedCriteria使用介绍

    // 主查询和子查询关联 (也就是 where unid in (select usernuid from)) searDc.add(Property.forName("unid").in(sub)); ``` 这样,你就可以构建类似于 SQL 的子查询结构:`Select * from Person a where a.unid ...

    Hibernate(24): 为什么用DetachedCriteria不能表连接地取数据?

    在Java的持久化框架Hibernate中,DetachedCriteria是一个强大的查询工具,它允许我们在不与Session交互的情况下构建查询条件。然而,DetachedCriteria在处理复杂的关联查询,尤其是涉及到表连接(JOIN)时,可能存在...

    Hibernate_Criteria条件查询数据

    10. **使用DetachedCriteria**:当查询条件在未来的某个时刻才确定时,可以先创建一个DetachedCriteria对象,然后在需要的时候再与Session关联并执行查询。 在实际开发中,Hibernate Criteria查询提供了很大的便利...

    QBC的各种查询

    Criteria接口提供了多种方法,如add()用于添加查询条件,setFirstResult()和setMaxResults()用于分页,createAlias()用于关联查询等。DetachedCriteria则允许我们在不直接影响Session的情况下构建查询,提高了代码的...

    Criteria的完整用法.pdf

    - **FetchMode**:控制Hibernate如何加载关联对象,如EAGER(急切加载)和LAZY(延迟加载),影响查询性能和资源消耗。 - **Sort Order**:设置查询结果的排序方式,通过`Criteria`的`addOrder(Order)`方法实现。 ...

    hibernate里面的 两种查询

    - **基本操作**:Criteria查询可以通过DetachedCriteria创建,然后添加各种限制条件,如Restrictions.eq()用于等于,gt()用于大于等。还可以通过Projections获取特定的查询结果,如sum()、count()等。Order类用于...

    Hibernat 使用Criteria查询多对多关系(SET集合)条件

    然后,添加查询条件,这里包括`MainClass`的`type`属性等于1以及其关联的`SubClass`的`value`属性等于2: ```java criteria.add(Restrictions.eq("type", new Integer(1))) .createAlias("subs", "s") // 创建别名...

    hibernate最新学习手册

    4. 加载(Load)与检索(Find):通过Session的load()和get()方法获取对象,find()方法则可以根据条件查询。 五、查询语言(HQL) Hibernate提供了一种面向对象的查询语言,即HQL,它允许开发者以类和属性的方式...

    Criteria使用方法

    无论是简单的条件查询还是复杂的多表关联查询,Criteria都能提供强大的支持。同时,DetachedCriteria的引入使得查询条件可以独立于Session存在,进一步增强了应用的灵活性。理解并熟练掌握这些API的使用方法,对于...

    hibernate查询

    本文将详细介绍Hibernate的几种主要查询方式,包括对象的状态变化、数据加载机制,以及如何通过不同方法进行条件查询。 #### 二、对象状态及其变化 在Hibernate中,一个对象可以处于三种不同的状态:自由态...

    Hibernate QBC高级查询.rar

    2. **DetachedCriteria**:这是一个离线查询对象,可以在不与Session交互的情况下构建查询条件,然后在需要的时候再与Session结合执行,这对于延迟加载和构建复杂的查询非常有用。 3. **Criteria查询的构建**:包括...

    Criteria.pdf

    相比之下,`DetachedCriteria`是一种独立于`Session`的查询对象,可以在没有活跃`Session`的情况下创建和配置,然后在稍后的某个时刻与`Session`关联执行查询。 #### Criteria与DetachedCriteria的区别 - **创建...

    Hibernate-基础联表模板

    综上所述,"Hibernate-基础联表模板"涵盖了Hibernate中关于联表查询的基础知识,包括各种查询方式、关联关系的定义、Fetch策略以及查询结果的处理等,是开发者进行数据库操作的有力助手。通过这个模板,开发者可以...

    hibernate-distribution-3.5.0-Final-dist文档

    - **Criteria**: 提供了一种更具面向对象的查询方式,通过Criteria和DetachedCriteria对象构建查询。 - **Criteria API中的Projection和Restriction**: Projection用于指定查询结果的返回格式,如属性、聚合函数等...

    day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询

    在Criteria API中,我们可以通过DetachedCriteria或Session的createCriteria方法创建一个Criteria实例,然后使用add方法添加限制条件,如EqRestrictions.eq("propertyName", value)来匹配特定属性值。最后,调用list...

    Hibernate中Criteria的用法详解

    而DetachedCriteria则是一个独立的对象,可以在不依赖Session的情况下构建查询,然后在需要的时候与Session关联执行。DetachedCriteria通过forClass()或forEntityName()方法初始化,这对于在服务层组装查询条件非常...

    Hibernate的Criteria用法

    Hibernate 3引入了`DetachedCriteria`,它允许你在不直接涉及Session的情况下构建查询条件。这有助于分离业务逻辑和数据访问层,使代码更易管理。创建DetachedCriteria的示例如下: ```java DetachedCriteria ...

    Hibernate Criteria 完全使用

    Criteria API 支持连接查询,通过 `createCriteria()` 方法可以添加关联实体,然后设置关联条件。 ```java criteria.createCriteria("associatedEntity", "assocAlias") .add(Restrictions.eq("assocProperty", ...

Global site tag (gtag.js) - Google Analytics