灵活使用Hibernate的查询对象DetachedCriteria

原创 2006年06月04日 09:28:00

Hibernate提供了HQL,方便查询的编写。但是在某些情况下,我更喜欢用Criteria,因为它的语义非常明确。

在处理对象关联的时候,经常要对对象下的某个集合字段进行条件限制。比如下面的类:

public class MainClass
{
protected
long id;
  protected int type;
  protected Set<SubClass>
subs= new HashSet<SubClass>();

  ......  getter/setter


public class SubClass
{
protected
long id;
  protected int value;
  protected Set<MainClass> ms = new HashSet<MainClass>();

  ...... getter/setter

在初始化数据中,假设MainClass的实例m1含有SubClass的实例s1,s2,s3;MainClass的实例m2含有SubClass的实例s2,s3,s4。

而其中s1,s2,s3,s4的value分别是1,2,3,4 

现在要查询出 MainClass中SubClass集合含有SubClass实例value为2的的MainClass实例并且type为1,可以使用下面的查询方法:

  DetachedCriteria criteria = DetachedCriteria.forClass(MainClass.class); 

criteria
.add(Restrictions.eq("type", new Integer(1)))
        .createAlias("subs", "s")
.add(Restrictions.eq("s.value", new Integer(2)));

执行此查询对象后会得到符合条件的MainClass实例。

需要注意的是在获取的MainClass实例中,subs是完全的记录集,而不是经过过滤的记录集,也就是相当于根据MainClass的ID获取的完整实例一样。

ps: 

  如果需要过滤subs的记录集,需要使用额外的过滤方法,请参考Hibernate的具体实现。

  使用HQL也可以很方便地实现,但是需要给出完整的join标记,不如createAlias来得方面和直观。

                                                                                                                                                       post by:Hubert Star(hubertstar@gmail.com)

Hibernate高效查询,只查询部分/指定字段

公司使用 DetachedCriteria detachedCriteria = DetachedCriteria.forClass(PeBulletin.class); detachedCrite...
  • yaerfeng
  • yaerfeng
  • 2013年01月17日 16:24
  • 27555

Hibernate-Criteria查询(3)DetachedCriteria构造查询条件、命名查询、原生SQL、调用存储过程(使用JDBC)

package junit.test;import static org.junit.Assert.*;import java.sql.CallableStatement; import java.s...

Hibernate的Criteria和DetachedCriteria 查询

最近在项目中使用 Spring 和 Hibernate 进行开发,有感于 Criteria 比较好用,在查询方法  设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的...
  • he90227
  • he90227
  • 2014年09月12日 17:44
  • 1078

Hibernate的动态条件查询DetachedCriteria

在常规的Web编程中,有大量的动态条件查询,即用户在网页上面自由选择某些条件,程序根据用户的选择条件,动态生成SQL语句,进行查询。   针对这种需求,对于分层应用程序来说,Web层需要传递一个...

Java_hibernate 之Criteria 与 DetachedCriteria查询

最近在做hibernate查询封装时,发现Hibernate 提供的Criteria接口查询方法还是蛮好用的,对sql语句不熟的同学来说可能是福音。 org.hibernate.Criteria对SQ...

Hibernate3的动态条件查询DetachedCriteria

在常规的Web编程中,有大量的动态条件查询,即用户在网页上面自由选择某些条件,程序根据用户的选择条件,动态生成SQL语句,进行查询。   针对这种需求,对于分层应用程序来说,Web层需要传递一个...

Hibernate-DetachedCriteria离线查询

会话是在数据访问dao层运用的! 会话是跟数据库打交道的。Criteria是放在dao层做的。数据访问层无非就是增删改查,要做的单纯些。同样的增加,你不同的类,你又要写不同的新方法,这样就好累了- ...

Hibernate3的DetachedCriteria使用

Criteria對SQL進行封裝,讓開發人員可以用物件的方式來對資料庫進行操作,例如下面的查詢User表格中的所有資料: Criteria criteria = session.createCr...

Hibernate3中DetachedCriteria的使用

使用detachedCriteria时,很多时候需要参考下面的资料: 先说排序: detachedCriteria.addOrder(Order.desc(properyName)); Crite...

DetachedCriteria离线查询离线查询---实现模糊查询 Hibernate

DetachedCriteria dc = DetachedCriteria.forClass(Emp.class); addJob(dc, job); addSal(dc, salLow...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 灵活使用Hibernate的查询对象DetachedCriteria
举报原因:
原因补充:

(最多只允许输入30个字)