Как написать HQL-запрос?

#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