如果实体对象中没有关联对象的情况使用DetachedCriteria进行查询是一件很简单的事情。
如果实体对象中含有OneToOne或者ManyToOne关联对象的情况可以参考下面方式,使用别名:
假设要通过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 dc = DetachedCriteria.forClass(Student.class);
dc.createAlias("team", "t");
dc.createAlias("t.school", "s");
dc.add(Restrictions.like("s.schoolName", schoolName, MatchMode.ANYWHERE));
如果实体对象中含有OneToMany关联对象的情况,既是实体中含有list或Set等关联实体集合的情况下怎么办呢?
这个还不知道怎么办,呵呵
方法其实是非常简单的:
dc.createAlias("tags", "t");
dc.add(Restrictions.eq("t.id", tagId));
其中tags是个Set,但是想查找属性tags中含有id为tagId的实体,使用上面的就可以了。
分享到:
相关推荐
- 数据库查询效率:为了提高性能,可以使用预编译的SQL语句(Hibernate的Criteria API或HQL的DetachedCriteria)。 - 视图的懒加载:避免一次性加载所有菜单,而是根据用户的交互动态加载需要的子菜单。 - 安全性...
- Criteria查询:使用Criteria、DetachedCriteria构建查询条件,可以添加限制、排序、分页等。 - 查询缓存:提高查询效率,分为一级缓存(Session缓存)和二级缓存(SessionFactory缓存)。 4. Hibernate面试题...
7. Criteria API和DetachedCriteria:进一步讲解Criteria API,包括如何创建、组合查询条件,以及DetachedCriteria的使用,便于代码复用。 8. Criteria与HQL的比较:对比两种查询方式的优缺点,指导何时选择哪种...
6. **DetachedCriteria**:这个类允许在没有打开`Session`的情况下创建查询条件,然后在需要的时候在`Session`上执行。 7. **Query接口**:`Query`用于执行HQL(Hibernate Query Language)查询,可以获取单个或多...
DetachedCriteria允许在不处于Session上下文中的对象上构建查询,这对于延迟加载和非当前Session的查询非常有用。 6. **Cascading操作**:Hibernate支持级联操作,如级联保存、更新、删除等,这在处理关联对象时...
DetachedCriteria允许在不同Session之间构建查询,提高性能。 8. **Cascading与Associations**:详细解释了对象之间的关联(一对一、一对多、多对多)以及级联操作,如级联保存、删除等,帮助理解如何处理对象间的...
通过DetachedCriteria、Criteria、Projection等接口,可以方便地实现联表查询,同时支持各种查询条件、排序和分页。 6. **多对一(One-to-Many)和一对多(Many-to-One)关联** 这是两种常见的关联关系。在...
2. Criteria查询:提供了更灵活的API,通过Criteria、DetachedCriteria进行动态查询。 3. 查询优化:避免N+1查询问题,合理使用JOIN、批处理等技术提高性能。 五、其他特性 1. 持久化上下文:在Session内部维护了一...
7. ** Criteria API的DetachedCriteria**:这是一种可以独立于Session构建查询的方式,有助于提高代码的灵活性和可测试性。 8. **关联映射**:文档会详细阐述一对一、一对多、多对一、多对多等各种关联映射的配置和...
DetachedCriteria则允许在不涉及SessionFactory的情况下构建查询,增强了代码的可复用性和灵活性。书中详细介绍了这两种API的使用方法及优势。 六、事务与缓存 事务管理是数据库操作的关键部分,书中详细讨论了...
4. ** Criteria API的子接口**:如DetachedCriteria,可以创建分离的查询条件,适用于非当前Session的查询操作。另外,Projection和CriteriaJoin等接口提供了更高级的查询功能,如聚合函数和连接操作。 5. **Query...
2. 移动对象:`DetachedCriteria`允许在不打开Session的情况下构建查询,然后在需要时再进行执行。 总之,Hibernate 3.2.2作为一款成熟且稳定的ORM框架,其丰富的功能和良好的社区支持使得它在众多项目中依然保持...
通过Criteria、DetachedCriteria和Projection等接口,可以灵活地构造查询条件和结果集。 7. **一对多、多对一、一对一关联映射**:Hibernate支持不同类型的关联映射,如@OneToMany、@ManyToOne和@OneToOne。这些...
2. Criteria查询:另一种对象级别的查询方式,通过Criteria、DetachedCriteria等接口构建查询条件,灵活且动态。 四、级联操作与关联映射 1. 级联操作:通过 cascade 属性,可以在操作父对象时自动处理子对象的...
- Criteria查询构建:展示如何使用DetachedCriteria和Criteria对象创建复杂的查询。 7. **Cascading和Lifecycle** - 级联操作:解释级联属性如何影响关联对象的持久化行为,如`save-update`、`delete`等。 - ...
- DetachedCriteria:用于创建可重用的查询条件,不依赖于Session。 4. **Query和HQL** - HQL是Hibernate的查询语言,类似于SQL,但面向对象。 - Query接口:执行HQL查询,提供参数绑定、分页、排序等功能。 - ...
Criteria API支持直接在Session上构建查询,而DetachedCriteria则可以在不直接访问数据库的情况下预先构建查询条件,然后在需要时再与Session结合执行,这在分页查询和延迟加载等方面特别有用。 7. **一对多、多对...
7. **Criteria API与DetachedCriteria**:详细介绍DetachedCriteria,允许在不处于Session上下文的情况下构建查询,提高代码复用性。 8. **Cascading与Fetching策略**:讨论如何设置级联操作,如保存、更新和删除,...
5. ** Criteria API进阶**:可能涉及子查询、关联查询、分组和排序,以及如何使用Projection和DetachedCriteria来实现复杂的查询逻辑。 6. **延迟加载和级联操作**:介绍如何利用懒加载和即时加载策略优化性能,...
- DetachedCriteria:在不直接关联Session的情况下构造查询条件,适合于多层嵌套查询。 - Projections和Criteria Transformers:用于查询结果的转换,如计算平均值、计数等。 7. **实体和持久化类** - 实体类:...