文章转自
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”字符的特殊性。上述是个人观点,并未得到确实的证实。
分享到:
相关推荐
DetachedCriteria 查询 DetachedCriteria 是 Hibernate 中的一种离线查询对象,它可以在不依赖 Session 的情况下生成动态 SQL 语句并进行查询。下面是 DetachedCriteria 查询的详细知识点: 创建 DetachedCriteria...
在DetachedCriteria中定义的查询条件可以在稍后的时间点附加到Session上执行,这使得查询可以脱离当前的Session状态,因此得名“Detached”。这种特性在处理复杂的、跨多个事务的查询时非常有用,同时也可以避免因长...
// 主查询和子查询关联 (也就是 where unid in (select usernuid from)) searDc.add(Property.forName("unid").in(sub)); ``` 这样,你就可以构建类似于 SQL 的子查询结构:`Select * from Person a where a.unid ...
在Java的持久化框架Hibernate中,DetachedCriteria是一个强大的查询工具,它允许我们在不与Session交互的情况下构建查询条件。然而,DetachedCriteria在处理复杂的关联查询,尤其是涉及到表连接(JOIN)时,可能存在...
10. **使用DetachedCriteria**:当查询条件在未来的某个时刻才确定时,可以先创建一个DetachedCriteria对象,然后在需要的时候再与Session关联并执行查询。 在实际开发中,Hibernate Criteria查询提供了很大的便利...
Criteria接口提供了多种方法,如add()用于添加查询条件,setFirstResult()和setMaxResults()用于分页,createAlias()用于关联查询等。DetachedCriteria则允许我们在不直接影响Session的情况下构建查询,提高了代码的...
- **FetchMode**:控制Hibernate如何加载关联对象,如EAGER(急切加载)和LAZY(延迟加载),影响查询性能和资源消耗。 - **Sort Order**:设置查询结果的排序方式,通过`Criteria`的`addOrder(Order)`方法实现。 ...
- **基本操作**:Criteria查询可以通过DetachedCriteria创建,然后添加各种限制条件,如Restrictions.eq()用于等于,gt()用于大于等。还可以通过Projections获取特定的查询结果,如sum()、count()等。Order类用于...
然后,添加查询条件,这里包括`MainClass`的`type`属性等于1以及其关联的`SubClass`的`value`属性等于2: ```java criteria.add(Restrictions.eq("type", new Integer(1))) .createAlias("subs", "s") // 创建别名...
4. 加载(Load)与检索(Find):通过Session的load()和get()方法获取对象,find()方法则可以根据条件查询。 五、查询语言(HQL) Hibernate提供了一种面向对象的查询语言,即HQL,它允许开发者以类和属性的方式...
无论是简单的条件查询还是复杂的多表关联查询,Criteria都能提供强大的支持。同时,DetachedCriteria的引入使得查询条件可以独立于Session存在,进一步增强了应用的灵活性。理解并熟练掌握这些API的使用方法,对于...
本文将详细介绍Hibernate的几种主要查询方式,包括对象的状态变化、数据加载机制,以及如何通过不同方法进行条件查询。 #### 二、对象状态及其变化 在Hibernate中,一个对象可以处于三种不同的状态:自由态...
2. **DetachedCriteria**:这是一个离线查询对象,可以在不与Session交互的情况下构建查询条件,然后在需要的时候再与Session结合执行,这对于延迟加载和构建复杂的查询非常有用。 3. **Criteria查询的构建**:包括...
相比之下,`DetachedCriteria`是一种独立于`Session`的查询对象,可以在没有活跃`Session`的情况下创建和配置,然后在稍后的某个时刻与`Session`关联执行查询。 #### Criteria与DetachedCriteria的区别 - **创建...
综上所述,"Hibernate-基础联表模板"涵盖了Hibernate中关于联表查询的基础知识,包括各种查询方式、关联关系的定义、Fetch策略以及查询结果的处理等,是开发者进行数据库操作的有力助手。通过这个模板,开发者可以...
- **Criteria**: 提供了一种更具面向对象的查询方式,通过Criteria和DetachedCriteria对象构建查询。 - **Criteria API中的Projection和Restriction**: Projection用于指定查询结果的返回格式,如属性、聚合函数等...
在Criteria API中,我们可以通过DetachedCriteria或Session的createCriteria方法创建一个Criteria实例,然后使用add方法添加限制条件,如EqRestrictions.eq("propertyName", value)来匹配特定属性值。最后,调用list...
而DetachedCriteria则是一个独立的对象,可以在不依赖Session的情况下构建查询,然后在需要的时候与Session关联执行。DetachedCriteria通过forClass()或forEntityName()方法初始化,这对于在服务层组装查询条件非常...
Hibernate 3引入了`DetachedCriteria`,它允许你在不直接涉及Session的情况下构建查询条件。这有助于分离业务逻辑和数据访问层,使代码更易管理。创建DetachedCriteria的示例如下: ```java DetachedCriteria ...
Criteria API 支持连接查询,通过 `createCriteria()` 方法可以添加关联实体,然后设置关联条件。 ```java criteria.createCriteria("associatedEntity", "assocAlias") .add(Restrictions.eq("assocProperty", ...