`

使用DetachedCriteria实现级联查询

 
阅读更多
假设要通过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”字符的特殊性。上述是个人观点,并未得到确实的证实。
分享到:
评论

相关推荐

    SSH+级联菜单应用案例

    - 数据库查询效率:为了提高性能,可以使用预编译的SQL语句(Hibernate的Criteria API或HQL的DetachedCriteria)。 - 视图的懒加载:避免一次性加载所有菜单,而是根据用户的交互动态加载需要的子菜单。 - 安全性...

    java知识点,面试题总结

    - Criteria查询:使用Criteria、DetachedCriteria构建查询条件,可以添加限制、排序、分页等。 - 查询缓存:提高查询效率,分为一级缓存(Session缓存)和二级缓存(SessionFactory缓存)。 4. Hibernate面试题...

    NHibernate.3.0.Cookbook随书代码

    5. ** Criteria API进阶**:可能涉及子查询、关联查询、分组和排序,以及如何使用Projection和DetachedCriteria来实现复杂的查询逻辑。 6. **延迟加载和级联操作**:介绍如何利用懒加载和即时加载策略优化性能,...

    hibernate3使用手册

    - DetachedCriteria:在不直接关联Session的情况下构造查询条件,适合于多层嵌套查询。 - Projections和Criteria Transformers:用于查询结果的转换,如计算平均值、计数等。 7. **实体和持久化类** - 实体类:...

    hibernate3.1.2中文版学习手册.rar

    7. Criteria API和DetachedCriteria:进一步讲解Criteria API,包括如何创建、组合查询条件,以及DetachedCriteria的使用,便于代码复用。 8. Criteria与HQL的比较:对比两种查询方式的优缺点,指导何时选择哪种...

    hibernate3.2-中文帮助文档

    7. **Criteria API与DetachedCriteria**:介绍如何使用Criteria API进行分页查询、排序以及实现延迟加载。DetachedCriteria允许在不同Session之间构建查询,提高性能。 8. **Cascading与Associations**:详细解释了...

    hibernate-2.0.zip

    - Criteria查询构建:展示如何使用DetachedCriteria和Criteria对象创建复杂的查询。 7. **Cascading和Lifecycle** - 级联操作:解释级联属性如何影响关联对象的持久化行为,如`save-update`、`delete`等。 - ...

    孙卫琴精通hibernate part2

    - 学习如何使用Criteria API创建查询,包括添加限制条件、排序、分页等,以及如何使用DetachedCriteria进行延迟加载。 3. **Chapter 10:一对多与多对一关系映射** - Hibernate支持多种关系映射,本章将深入讲解...

    Hibernate权威文档(中文)

    7. ** Criteria API的DetachedCriteria**:这是一种可以独立于Session构建查询的方式,有助于提高代码的灵活性和可测试性。 8. **关联映射**:文档会详细阐述一对一、一对多、多对一、多对多等各种关联映射的配置和...

    Hibernate-基础联表模板

    通过DetachedCriteria、Criteria、Projection等接口,可以方便地实现联表查询,同时支持各种查询条件、排序和分页。 6. **多对一(One-to-Many)和一对多(Many-to-One)关联** 这是两种常见的关联关系。在...

    hibernate帮助文档中+英

    6. **Criteria API**:学习使用Criteria API进行类型安全的查询,以及DetachedCriteria的使用,实现更加灵活的查询逻辑。 7. ** Criteria API的子查询**:掌握如何在Criteria查询中嵌入子查询,以满足复杂的查询...

    Hibernate备课笔记.pdf

    2. Criteria查询:提供了更灵活的API,通过Criteria、DetachedCriteria进行动态查询。 3. 查询优化:避免N+1查询问题,合理使用JOIN、批处理等技术提高性能。 五、其他特性 1. 持久化上下文:在Session内部维护了一...

    hibernate v3.04中文参考手册

    - Criteria与DetachedCriteria,实现检索、过滤、排序等操作。 7. **Cascading与Lazy Loading** - Cascading:级联操作,如级联保存、更新、删除等。 - Lazy Loading:延迟加载,只在真正需要时加载关联对象,...

    hibernate-3.6.6

    8. **Criteria API**:提供了一组接口和类,用于构建动态查询,包括DetachedCriteria用于离线查询,Criteria用于在线查询。 9. **事务管理**:Hibernate支持JTA(Java Transaction API)和JDBC事务,通过`Session....

    hibrenate3.6___API__zh-CN

    - DetachedCriteria:用于创建可重用的查询条件,不依赖于Session。 4. **Query和HQL** - HQL是Hibernate的查询语言,类似于SQL,但面向对象。 - Query接口:执行HQL查询,提供参数绑定、分页、排序等功能。 - ...

    hibernate 3.2.2

    2. 移动对象:`DetachedCriteria`允许在不打开Session的情况下构建查询,然后在需要时再进行执行。 总之,Hibernate 3.2.2作为一款成熟且稳定的ORM框架,其丰富的功能和良好的社区支持使得它在众多项目中依然保持...

    Hibernate API Doc (3.1.3)

    通过Cache接口和实现如Ehcache插件,可以配置和使用二级缓存。 9. **集合映射**:Hibernate支持多种集合类型的映射,如List、Set、Map等,以及它们的懒加载和级联操作。 10. **事件监听器**:Hibernate允许注册...

    hibernate开发指南

    13. **查询优化**:包括预编译SQL(Criteria API的DetachedCriteria)、批处理更新和优化检索策略,以提高应用程序的性能。 14. **实体监听器和事件处理**:通过监听器可以实现对对象生命周期事件的定制处理,如在...

    Hibernate培训教程

    DetachedCriteria允许你在不直接访问Session的情况下构建查询,这在多线程或延迟加载场景下非常有用。 **9. Criteria与HQL的比较** 虽然两者都能实现数据库查询,但它们有不同的应用场景和优势。理解何时使用...

    hibernate3.0帮助文档

    Criteria API支持直接在Session上构建查询,而DetachedCriteria则可以在不直接访问数据库的情况下预先构建查询条件,然后在需要时再与Session结合执行,这在分页查询和延迟加载等方面特别有用。 7. **一对多、多对...

Global site tag (gtag.js) - Google Analytics