Hibernat 使用Criteria查询多对多关系(SET集合)条件
2011-04-03 18:23
232 查看
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来得方面和直观。
在处理对象关联的时候,经常要对对象下的某个集合字段进行条件限制。比如下面的类:
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来得方面和直观。
相关文章推荐
- Hibernat 使用Criteria查询多对多关系(SET集合)条件
- Hibernate中Criteria的使用(条件查询)
- Hibernate-Criteria查询(3)DetachedCriteria构造查询条件、命名查询、原生SQL、调用存储过程(使用JDBC)
- Hibernate里面如何使用DetachedCriteriaCriteria 实现多条件分页查询
- java开源框架集成常见错误之使用Criteria添加查询条件出现java.lang.ClassCastException异常
- 使用ADF-BC 实现查询功能之八:通过代码动态设置Criteria条件参数
- 条件查询detachedCriteria的使用
- 使用criteria进行多条件查询
- Mongo多条件查询与分组的使用
- morphia中查询时,使用关键字 in 的条件
- 关于php中使用odbc或者pdo连接sqlserver时如果查询条件中存在中文会导致查询失败的问题
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- Jeecg中使用<t: dgCol>标签的自动构造查询条件时出现类型转换错误的解决办法。
- 使用AspNetPager进行分页,查询条件丢失问题
- MySQL中使用case when 语句实现多条件查询的方法
- Hibernate使用Criteria实现查询
- [转]Hibernate条件查询(Criteria Query)
- ADO.NET select语句使用变量作为属性值的条件查询
- Hibernate用Criteria查询时使用Distinct方法去除重复数据
- C++标准库扩展,查找元素,使用修饰者模式构造查询条件