创建一个Criteria 实例

1. 创建一个Criteria 实例
org.hibernate.Criteria接口表示特定持久类的一个查询。Session是 Criteria实例的工厂。

 

2. 限制结果集内容
一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例。

org.hibernate.criterion.Restrictions类 定义了获得某些内置Criterion类型的工厂方法。

约束可以按逻辑分组。

 

Hibernate提供了相当多的内置criterion类型(Restrictions 子类), 但是尤其有用的是可以允许你直接使用SQL。

 

{alias}占位符应当被替换为被查询实体的列别名。

Property实例是获得一个条件的另外一种途径。你可以通过调用Property.forName() 创建一个Property。

 

3. 结果集排序
你可以使用org.hibernate.criterion.Order来为查询结果排序。

 

4. 关联
你可以使用createCriteria()非常容易的在互相关联的实体间建立 约束。

注意第二个 createCriteria()返回一个新的 Criteria实例,该实例引用kittens 集合中的元素。
接下来,替换形态在某些情况下也是很有用的。

(createAlias()并不创建一个新的 Criteria实例。)
Cat实例所保存的之前两次查询所返回的kittens集合是 没有被条件预过滤的。如果你希望只获得符合条件的kittens, 你必须使用returnMaps()。

 

5. 动态关联抓取
你可以使用setFetchMode()在运行时定义动态关联抓取的语义。

这个查询可以通过外连接抓取mate和kittens。

6. 查询示例
org.hibernate.criterion.Example类允许你通过一个给定实例 构建一个条件查询。

版本属性、标识符和关联被忽略。默认情况下值为null的属性将被排除。
可以自行调整Example使之更实用。

 

甚至可以使用examples在关联对象上放置条件。

 

 

7. 投影(Projections)、聚合(aggregation)和分组(grouping)
org.hibernate.criterion.Projections是 Projection 的实例工厂。我们通过调用setProjection()应用投影到一个查询。

在一个条件查询中没有必要显式的使用 "group by" 。某些投影类型就是被定义为 分组投影,他们也出现在SQL的group by子句中。

可以选择把一个别名指派给一个投影,这样可以使投影值被约束或排序所引用。下面是两种不同的实现方式:

alias()和as()方法简便的将一个投影实例包装到另外一个 别名的Projection实例中。简而言之,当你添加一个投影到一个投影列表中时 你可以为它指定一个别名:

也可以使用Property.forName()来表示投影:

 

8. 离线(detached)查询和子查询
DetachedCriteria类使你在一个session范围之外创建一个查询,并且可以使用任意的 Session来执行它。

DetachedCriteria也可以用以表示子查询。条件实例包含子查询可以通过 Subqueries或者
Property获得。

相互关联的子查询也是有可能的:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用以下代码创建javax.persistence.criteria.Order对象: ``` CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Entity> cq = cb.createQuery(Entity.class); Root<Entity> root = cq.from(Entity.class); cq.orderBy(cb.asc(root.get("fieldName"))); ``` 其中,`entityManager` 是一个 `javax.persistence.EntityManager` 对象,`fieldName` 是要排序的实体字段的名称。 ### 回答2: 在Java中,我们可以使用javax.persistence.criteria.CriteriaBuilder来创建javax.persistence.criteria.Order对象。 首先,我们需要获取EntityManager的实例,这可以通过EntityManagerFactory来获得。然后,我们使用EntityManager的getCriteriaBuilder()方法来获取CriteriaBuilder的实例。接下来,我们可以使用CriteriaBuilder的asc()方法或desc()方法来创建Order对象。 下面是创建Order对象的一个例子: ```java EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("examplePU"); EntityManager entityManager = entityManagerFactory.createEntityManager(); CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder(); CriteriaQuery<MyEntity> query = criteriaBuilder.createQuery(MyEntity.class); Root<MyEntity> root = query.from(MyEntity.class); Order order = criteriaBuilder.asc(root.get("myField")); query.orderBy(order); List<MyEntity> resultList = entityManager.createQuery(query).getResultList(); ``` 在上面的例子中,我们使用asc()方法创建了一个升序的Order对象,并将其传递给query对象的orderBy()方法。然后,通过调用entityManager的createQuery()方法来执行查询,并使用getResultList()方法获得结果列表。 需要注意的是,以上示例中的"examplePU"是一个持久单元的名称,需要根据具体的应用程序环境进行替换。此外,"MyEntity"是一个实体类的名称,代表我们希望查询的实体类型。"myField"是实体类的一个属性名,代表我们希望按照该属性进行排序。 总而言之,使用javax.persistence.criteria.CriteriaBuilder对象的asc()方法或desc()方法,我们可以很容易地创建javax.persistence.criteria.Order对象,并通过orderBy()方法将其添加到查询中,以实现对查询结果的排序。 ### 回答3: 在Java中,可以使用javax.persistence.criteria.CriteriaBuilder接口的asc和desc方法来创建javax.persistence.criteria.Order对象。 首先,需要获取一个CriteriaBuilder对象,可以通过EntityManager的getCriteriaBuilder方法来获取。然后可以使用CriteriaBuilder对象的asc和desc方法创建Order对象。 要创建一个升序排序的Order对象,可以使用asc方法,该方法接受一个Expression对象作为参数,表示要进行排序的字段。例如,可以这样创建一个按照名字字段升序排序的Order对象: ``` CriteriaBuilder builder = entityManager.getCriteriaBuilder(); Order order = builder.asc(root.get("name")); ``` 其中,root表示要查询的实体的根对象,get方法用于获取字段表达式。 要创建一个降序排序的Order对象,可以使用desc方法,用法和asc方法类似。例如,可以这样创建一个按照年龄字段降序排序的Order对象: ``` CriteriaBuilder builder = entityManager.getCriteriaBuilder(); Order order = builder.desc(root.get("age")); ``` 最后,可以将Order对象传递给CriteriaQuery对象的orderBy方法,以便将排序应用于查询结果。例如: ``` CriteriaQuery<User> query = builder.createQuery(User.class); query.select(root).orderBy(order); ``` 这样,在执行查询时,结果会按照指定的排序方式进行排序。 总之,要在Java中创建javax.persistence.criteria.Order对象,首先需要获取一个CriteriaBuilder对象,然后使用asc或desc方法创建Order对象,最后将Order对象应用于CriteriaQuery对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值