hibernate Criteria 查询
来源:互联网 发布:淘宝网老人羊绒大衣 编辑:程序博客网 时间:2024/05/18 01:56
1 创建一个Criteria实例
org.hibernate.Criteria代表一个对特定持久化类的查询。Session是Criteria的工厂:
Criteria crit = sess.createCriteria(Cat.class);crit.setMaxResults(50);List cats = crit.list();
2 限制结果集
一个单独的查询条件是 org.hibernate.criterion.Criterion接口的一个实例。类 org.hibernate.criterion.Restrictions
声明了工厂方法获得内置的标准类型。
List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "Fritz%") ) .add( Restrictions.between("weight", minWeight, maxWeight) ) .list();约束可以按逻辑分组
List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "Fritz%") ) .add( Restrictions.or( Restrictions.eq( "age", new Integer(0) ), Restrictions.isNull("age") ) ) .list();
List cats = sess.createCriteria(Cat.class) .add( Restrictions.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) ) .add( Restrictions.disjunction() .add( Restrictions.isNull("age") ) .add( Restrictions.eq("age", new Integer(0) ) ) .add( Restrictions.eq("age", new Integer(1) ) ) .add( Restrictions.eq("age", new Integer(2) ) ) ) ) .list();有一系列内置Criterion类型(Restrictions子类),其中最有用的是你可以直接使用SQL语句。
List cats = sess.createCriteria(Cat.class) .add( Restrictions.sqlRestriction("lower({alias}.name) like lower(?)", "Fritz%", Hibernate.STRING) ) .list();用具体查询实体该行的别名代替占位符{alias}。你也可以从一个Property实例获得criterion,你可以通过调用Property.forName()创建一个Property:
Property age = Property.forName("age");List cats = sess.createCriteria(Cat.class) .add( Restrictions.disjunction() .add( age.isNull() ) .add( age.eq( new Integer(0) ) ) .add( age.eq( new Integer(1) ) ) .add( age.eq( new Integer(2) ) ) ) ) .add( Property.forName("name").in( new String[] { "Fritz", "Izi", "Pk" } ) ) .list();
3 结果集排序
你可以使用org.hibernate.criterion.Order对结果集进行排序。
List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "F%") .addOrder( Order.asc("name") ) .addOrder( Order.desc("age") ) .setMaxResults(50) .list();
List cats = sess.createCriteria(Cat.class) .add( Property.forName("name").like("F%") ) .addOrder( Property.forName("name").asc() ) .addOrder( Property.forName("age").desc() ) .setMaxResults(50) .list();
4 关联
通过createCriteria()检索关联关系,你可以通过在相关实体上指定约束:
List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "F%") ) .createCriteria("kittens") .add( Restrictions.like("name", "F%") ) .list();第二个createCriteria()返回一个指向kittens集合的Criteria实例。
还有一个替代形式,在某些情况下特别有用:
List cats = sess.createCriteria(Cat.class) .createAlias("kittens", "kt") .createAlias("mate", "mt") .add( Restrictions.eqProperty("kt.name", "mt.name") ) .list()createAlias()没有创建一个Criteria实例。
由前面两个查询中Cat实例持有的kittens集合没有预先设置过滤标准。
如果你只想获得符合条件的kitten,你必须使用ResultTransFormer:
List cats = sess.createCriteria(Cat.class) .createCriteria("kittens", "kt") .add( Restrictions.eq("name", "F%") ) .setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP) .list();Iterator iter = cats.iterator();while ( iter.hasNext() ) { Map map = (Map) iter.next(); Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS); Cat kitten = (Cat) map.get("kt");}此外,你可以使用左外连接操作结果集:
List cats = session.createCriteria( Cat.class ) .createAlias("mate", "mt", Criteria.LEFT_JOIN, Restrictions.like("mt.name", "good%") ) .addOrder(Order.asc("mt.age")) .list();上面会返回所有有伴侣并且伴侣的名字以good开头,按照伴侣年龄排序的猫以及所有没有伴侣的猫。在返回复杂/大型结果集之前,需要订购或限制在数据库中非常有用。
并且去除很多情况下,通过java许多查询和结果集的联合在内存中被执行。如果没有这个特性,首先所有没有伴侣的猫需要一个查询来加载,第二个查询需要获得伴侣名字以“good”
开头,并按年龄排序的猫。第三,在内存中,该列表需要手动连接。
5 动态关联抓取
你可以在运行时使用setFetchMode()指定关联抓取语义:
List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "Fritz%") ) .setFetchMode("mate", FetchMode.EAGER) .setFetchMode("kittens", FetchMode.EAGER) .list();
6 组件
要添加一个限制对一个嵌入式组件的属性。组件属性名应该在创建限制时被附加到属性名。criteriad对象要被拥有它的实体创建,而不是组件本身。举例来说,假设Cat有一个
组件属性fullName包括两firstName和lastName.
List cats = session.createCriteria(Cat.class).add(Restrictions.eq("fullName.lastName", "Cattington")).list();
7 集合
当对集合使用Criteria,有两种不同的情况。一种是集合中包含实体(如:one-to-many or many-to-many)或组件(composite-element),第二种情况是集合中含有
标量。第一种情况即上面提到的关联。从本质上讲,我们创建一个criteria实例对集合的属性或限制实体或组件的属性。
对于查询基本值集合,我们仍然为集合创建criteria,使用特殊的属性“elements”.对于一个索引集合,我们可以使用特殊的属性“indices”引用索引属性
List cats = session.createCriteria(Cat.class).createCriteria("nickNames").add(Restrictions.eq("elements", "BadBoy")).list();
0 0
- Hibernate Criteria 关联查询
- hibernate 动态查询 Criteria
- Hibernate 中的 Criteria 查询。
- Hibernate-Criteria 模糊查询
- Hibernate---Criteria 查询
- Hibernate-Criteria 模糊查询
- Hibernate Criteria 查询 详细参数
- hibernate --Criteria条件查询
- Hibernate-Criteria 模糊查询
- hibernate中criteria查询
- hibernate criteria查询
- Hibernate之 Criteria查询
- hibernate Example、Criteria 查询
- Hibernate Criteria 关联查询
- Hibernate Criteria查询
- Hibernate的Criteria查询
- hibernate Criteria 查询
- Hibernate 中的 Criteria 查询。
- 套餐wi么做,改牙油
- 且看且学Gradle--(1)Gradle入门
- 2012 届华为校园招聘上机考试题目(9 月 6 日下午 1 点场)
- 时间操作(JavaScript版)—年月日三级联动(默认显示系统时间)
- 看这个区S引如图朋友问
- hibernate Criteria 查询
- 订残ft他静的决盟
- 大家者社if记下以示滥
- 一周组织事情注射我也踪
- 夏令营9天if测力归正鬃
- 软件系统设计思路
- 总结了一些学习c++的网址
- 惊呆者社,那如图归正始
- 暑期ft言吸止暗懒