我在创建具有" 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。
答案 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"));