休眠标准。分组功能在section之间,怎么办?
Hibernate Criteria. Group functions in between section, how to do?
我在创建在 "between" 块中具有 "avg" 函数的休眠条件查询时遇到了一些困难。
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 查询,该查询将 select 来自 Shop 此类实体,其 avg(ratings.value) 介于、大于或小于某些数字之间。我需要了解机制。如果您可以使用 Hibernate Criteria API 编写这样的查询,请帮助我。谢谢!
编辑 1 Criteria 查询应该来自 Session 对象而不是来自 EntityManager。
试试这个。
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"));
我在创建在 "between" 块中具有 "avg" 函数的休眠条件查询时遇到了一些困难。
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 查询,该查询将 select 来自 Shop 此类实体,其 avg(ratings.value) 介于、大于或小于某些数字之间。我需要了解机制。如果您可以使用 Hibernate Criteria API 编写这样的查询,请帮助我。谢谢!
编辑 1 Criteria 查询应该来自 Session 对象而不是来自 EntityManager。
试试这个。
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"));