【问题标题】:Hibernate Nested Select with Subquery带有子查询的休眠嵌套选择
【发布时间】:2017-02-13 22:25:25
【问题描述】:

我需要创建一个 Hibernate 条件来调用这个 SQL 查询

SELECT *, (SELECT avg(rating) FROM restaurant_review WHERE restaurant_id = restaurant.id) as "avegrageRating" FROM restaurant;

请帮忙:D

编辑: 以下是实体:

餐厅.java:

@Entity
@Table(name = "restaurant")
public class Restaurant {

    @Id
    @Column(name = "id")
    public int id;

    @Column(name = "name")
    public String name;

    @Column(name = "description")
    public String description;

    @OneToMany(mappedBy = "restaurantId")
    public List<RestaurantReview> reviews;
}

RestaurantReview.java

@Entity
@Table(name = "restaurant_review")
public class RestaurantReview {

    @Id
    @Column(name = "id")
    public Integer id;

    // This Many to One causes an Unable to build entity manager factory exception
    @ManyToOne
    @JoinColumn(name = "restaurant_id", referencedColumnName="id")
    public Integer restaurantId;

    @Column(name = "user_id")
    public Integer userId;

    @Column(name = "rating")
    public Integer rating;
}

我希望这会有所帮助。 我需要获取餐厅表中所有餐厅的列表,并额外添加一列包含其他表的平均评分。

【问题讨论】:

    标签: hibernate subquery hibernate-criteria


    【解决方案1】:

    由于您没有在此处提及您的实体,因此假设您的实体我已经制作了以下代码,请检查...希望它会对您有所帮助。

    Session session=getSession();
        Criteria criteria = session.createCriteria(Restaurant.class);
        criteria.setProjection(Projections.projectionList().add(Projections.property("restaurant_review.restaurant_id"),"restaurant_id")
    .add(Projections.property("restaurant_review.restaurant_name"),"restaurant_name")
                .add(Projections.alias(Projections.avg("rating"), "rating")).add(Projections.groupProperty("restaurant_review")));
        criteria.setResultTransformer(Transformers.aliasToBean(RestaurantPojo.class));  // Create a class having property name mention right sided as above 
        return (List<RestaurantPojo>)criteria.list();
    

    【讨论】:

    • 我已经编辑了问题以包含更多详细信息。请检查一下
    • RestaurantReview 中的参考列在哪里。例如:@manytoone to Restaurant
    • 当我添加 @ManyToOne @JoinColumn(name = "restaurant_id", referencedColumnName="id") 我得到 Unable to build entity manager factory 异常
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    相关资源
    最近更新 更多