#java #sql #hibernate #jpa #hql
#java #sql #переход в спящий режим #jpa #hql
Вопрос:
Есть таблица, CART_ITEMS
где drink_id
указано id
количество напитка, а order_id
это id
порядок, в котором он расположен, count
это количество этого напитка в заказе. Вам нужно отобразить 6 самых популярных напитков из этой таблицы. Я написал SQL-запрос:
SELECT drink_id, sum(count) as count
FROM cart_items
GROUP BY drink_id
ORDER BY 2 DESC
LIMIT 6
Но как мы можем переписать это HQL
сейчас? Я пытался написать код, но Intelij Idea ругается на функции sum
и limit
.
@Query("select C.drink, sum(count) as count from CartItem C group by C.drink order by 2 DESC limit 6")
List<Drink> getMostPopularDrinks();
CartItem:
@Getter
@Setter
@Entity
@NoArgsConstructor
@Table(name = "cart_items")
public class CartItem {
@Data
@Embeddable
@NoArgsConstructor
@AllArgsConstructor
public static class CartId implements Serializable {
private Long order_id;
private Long drink_id;
}
/**
* key @EmbeddedId
*/
@EmbeddedId
private CartId cartId;
@ManyToOne
@JoinColumn(name = "order_id", referencedColumnName = "id",
nullable = false, insertable = false, updatable = false)
private Order order;
@ManyToOne
@JoinColumn(name = "drink_id", referencedColumnName = "id",
nullable = false, insertable = false, updatable = false)
private Drink drink;
/**
* Count of drink
*/
private int count;
}
Комментарии:
1. Извините. Я перевожу
2. Я не думаю, что limit поддерживается как часть HQL. Вы можете использовать NativeQuery. Вы можете ввести ограничения с помощью limitstatement в вашем SQL. И укажите NativeQuery = true в аннотации @Query, чтобы рассматривать это как собственный SQL-запрос.
@Query(nativeQuery = true, value = "SELECT drink_id, sum(count) as count FROM cart_items GROUP BY drink_id ORDER BY 2 DESC LIMIT 6") List<Drink> getMostPopularDrinks();
3. пожалуйста, попробуйте использовать PageRequest.of(0,5) эта ссылка может вам помочь baeldung.com/spring-data-jpa-pagination-sorting