休眠标准。组间功能分组,怎么办?

时间:2015-03-13 22:33:28

标签: java sql hibernate criteria

我在创建具有" avg"的hibernate条件查询方面遇到了一些困难。功能在"之间"块。

Shop.java

的一部分
@Entity
@javax.persistence.Table(name = "shop")
public class Shop {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @OneToMany(mappedBy = "shop", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<Rating> ratings = new ArrayList<Rating>();

Rating.java

的一部分
@Entity
@javax.persistence.Table(name = "rating")
public class Rating {

    @Id
    private int id;

    private int value;
    private String comment;

基本上,我需要创建SELECT查询,它将从Shop中选择avg(ratings.value)介于其中,大于或小于某些数字的实体。我需要了解这个机制。如果您可以使用Hibernate Criteria API编写此类查询,请帮助我。谢谢!

编辑1 Criteria查询应该来自Session对象,而不是来自EntityManager。

1 个答案:

答案 0 :(得分:0)

试试这个。

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Shop > cq = cb.createQuery(Shop.class);
Root<Shop > root = cq.from(Shop.class);
cq.select(root.get("id"), cb.avg(root.get("ratings")));
cq.where( cb.le(cb.avg(root.get("ratings"), 5);
cq.groupBy(c.get("id"));