Hibernate中离线查询经常用到。
问题:但当查询条件并不仅仅涉及到一个实体,而是还含有关联的实体中的属性时,就不知道怎么弄了。自己摸索了好久才发现原来API中已经提供了相应的解决方法。
情况1:
涉及到一个实体
查询条件涉及到的是Goods,如果查询时查询的是Goods表,那简单了
Service层
public List<History> findByCondition(Goods goods) {
DetachedCriteria dc=DetachedCriteria.forClass(History.class);
if(goods().getNm()!=null){
dc.add(Restrictions.like("nm", "%"+goods().getNm()+"%"));
}
……
return goodsDao.findByDetached(dc);
}
情况2:
但实际情况是:这是查询出入库操作历史的查询页面,所以Action中使用模型驱动时的
Model是History而非Store了,尽管这些参数最终还是封装到了History关联的Goods中。自然的传到Service层时的参数就不是上面代码中的Goods了,而是History了。这是就要用到”取别名“方式了。
public List<History> findByCondition(History history) {
DetachedCriteria dc=DetachedCriteria.forClass(History.class,"h");//别名:History对应h
dc.createAlias("h.goods", "g");//别名:Goods对应g
dc.createAlias("h.goods.store","s");//别名:Store对应s
if(history.getGoods().getNm()!=null){
dc.add(Restrictions.like("g.nm", "%"+history.getGoods().getNm()+"%"));
}
if(history.getGoods().getName()!=null){
dc.add(Restrictions.like("g.name", "%"+history.getGoods().getName()+"%"));
}
if(history.getGoods().getStore()!=null){
dc.add(Restrictions.like("s.id", "%"+history.getGoods().getStore().getId()+"%"));
}
return historyDao.findByDetached(dc);
}
分享到:
相关推荐
使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查询条件的创建和组装。如使用 `session.createCriteria(Class)` 方法来创建 Criteria 实例,然后使用 `add(Criterion criterion)...
本篇将深入探讨Hibernate中的DetachedCriteria操作,帮助你更好地理解和运用这一功能。 **1. Hibernate 概述** Hibernate 是一个开源的对象关系映射(ORM)框架,它提供了数据访问和事务处理的解决方案,通过将业务...
### Hibernate中的查询方式详解 #### 一、HQL查询(Hibernate Query Language) HQL是Hibernate提供的面向对象的查询语言,其语法与SQL相似但并非完全相同。HQL的一个显著优势在于它具有很好的跨数据库能力,这...
如果要在DetachedCriteria中查询这两个实体的关联数据,可以先分别构建DetachedCriteria,然后在执行时合并它们,但这实际上并不是真正的JOIN操作,而是通过两个独立的查询来模拟JOIN的效果。 例如,你可以这样操作...
5. **多态查询的实现**:Hibernate支持使用`DetachedCriteria`或`Criteria` API来进行多态查询,通过`createCriteria()`方法指定父类,并使用`add(Restrictions.in("property", values))`等方法来限制查询条件。...
DetachedCriteria 是 Hibernate 中的一种离线查询对象,它可以在不依赖 Session 的情况下生成动态 SQL 语句并进行查询。下面是 DetachedCriteria 查询的详细知识点: 创建 DetachedCriteria 对象 DetachedCriteria...
在Hibernate中,每一个数据库表都对应一个Java类,称为实体类。我们需要在实体类中定义属性,这些属性与数据库表的字段相对应。例如,如果我们要查询一个名为`users`表中的`username`字段,我们可能有一个User实体类...
在Java的持久化框架Hibernate中,查询是连接应用程序与数据库的关键环节。Hibernate提供了两种主要的查询方式:离线查询(Criteria API)和HQL(Hibernate Query Language)语句查询。这两种查询方法各有特点,适用...
另外,Hibernate的 Criteria API 还可以配合DetachedCriteria使用,实现延迟加载(Lazy Loading),这对于处理大数据量时的性能优化至关重要。延迟加载允许我们在需要时才加载关联的对象,避免一次性加载大量数据...
2. **DetachedCriteria**:这是一个离线查询对象,可以在不与Session交互的情况下构建查询条件,然后在需要的时候再与Session结合执行,这对于延迟加载和构建复杂的查询非常有用。 3. **Criteria查询的构建**:包括...
使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查询条件的创建和组装。通过 Criteria,可以根据实际情况灵活地组装查询条件,以满足复杂的查询需求。 Hibernate 的 Criteria 是...
本文将深入探讨如何使用Hibernate进行数据表中的部分字段查询,这在实际开发中是非常常见的需求。 首先,理解Hibernate的核心概念:实体(Entity)、持久化类(Persistent Class)和映射文件(Mapping File)。实体...
在这个例子中,我们从`User`实体中查询用户名为"testUser"的所有用户。 ### 二、Criteria查询 Criteria API是Hibernate提供的另一种查询方式,它允许开发者通过构建对象化的查询条件来执行数据库查询。下面是如何...
在上面的示例中,我们首先通过`HibernateUtil.getSession()`方法获取到一个`Session`实例,然后定义了一个HQL查询语句,该语句用于从`Admin`表中查询`aname`为`name`的所有记录。最后通过`createQuery`方法创建查询...
本文将详细介绍Hibernate的五种查询方式,包括HQL查询、Criteria方法、动态查询DetachedCriteria、例子查询、SQL查询以及命名查询,以满足不同场景下的需求。 1. HQL查询: Hibernate Query Language(HQL)是一种...
在Hibernate中,我们可以使用Criteria的setFirstResult和setMaxResults方法来实现分页。setFirstResult指定从哪一条记录开始获取,setMaxResults指定要获取多少条记录。这样,每次查询只返回一部分数据,从而实现...
7. **Criteria API的DetachedCriteria**:允许在不与数据库交互的情况下构造查询,之后再进行执行,有助于实现更高效的查询策略。 8. ** Criteria API的Projections**:用于获取聚合结果,如计数、求和、平均值等。...
使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查询条件的创建和组装。Criteria 和 DetachedCriteria 都可以使用Criterion 和 Projection 设置查询条件,可以设置 FetchMode...
**Hibernate查询方式详解** 在Java世界中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。...在博客中,我详细讲解了每个查询方法的使用和注意事项,还有更多的实战案例等待你去探索。
在本文中,我们将深入探讨Hibernate中的一些基本查询方法,这对于初学者掌握Hibernate进行数据操作非常有帮助。 1. **保存(Save)** Hibernate提供了`save()`方法来保存一个持久化对象到数据库。例如,如果有一个...