#hibernate #subquery #hibernate-criteria
#спящий режим #подзапрос #спящий режим-критерии
Вопрос:
Мне нужно создать критерии гибернации, которые будут вызывать этот SQL-запрос
SELECT *, (SELECT avg(rating) FROM restaurant_review WHERE restaurant_id = restaurant.id) as "avegrageRating" FROM restaurant;
Пожалуйста, помогите: D
Редактировать: Вот сущности:
Restaurant.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;
}
Я надеюсь, что это поможет.
Мне нужно получить список ВСЕХ ресторанов в таблице ресторанов с дополнительным столбцом, содержащим средний рейтинг из другой таблицы.
Ответ №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();
Комментарии:
1. Я отредактировал вопрос, чтобы включить гораздо более подробную информацию. Пожалуйста, проверьте это
2. где находится ваш ссылочный столбец в RestaurantReview .. например: @manytoone в ресторан
3. когда я добавляю @ManyToOne @JoinColumn(name = «restaurant_id», referencedColumnName =»id»), я не могу создать исключение entity manager factory