【问题标题】:Convert mysql query to jpa query with pagination supported将 mysql 查询转换为支持分页的 jpa 查询
【发布时间】:2020-10-03 09:06:33
【问题描述】:

我有用于连接 3 个表的 mysql 查询,如何将其转换为支持分页的 JPA。 查询:

SELECT promotion.name, 
       promotion.promotion_type, 
       promotion.start_date, 
       promotion.end_date, 
       promotion_history.`count`                 AS order_count, 
       Count(user_promotion_history.promotionid) AS user_count 
FROM   promotion 
       INNER JOIN user_promotion_history 
               ON promotion.promotionid = user_promotion_history.promotionid 
       INNER JOIN promotion_history 
               ON promotion.promotionid = promotion_history.promotionid 
WHERE  promotion.status = "created" 
GROUP  BY promotion.name, 
          promotion.promotionid, 
          promotion.promotion_type, 
          promotion.start_date, 
          promotion.end_date, 
          order_count; 

我已经创建了所有实体和存储库类并使用了本机查询,

@Query(value = "select promotion.name, promotion.promotion_type, promotion.start_date, promotion.end_date" +
           " promotion_history.count as order_count, count(user_promotion_history.promotionid) as user_count" +
           " from promotion" +
           " inner JOIN user_promotion_history on" +
           " promotion.promotionid = user_promotion_history.promotionid" +
           " inner join promotion_history on" +
           " promotion.promotionid = promotion_history.promotionid" +
           " where promotion.status = :status" +
           " group by" +
           " promotion.name, promotion.promotionid, promotion.promotion_type, promotion.start_date,promotion.end_date, order_count",
nativeQuery = true)
List<Object[]> findByStatus(@Param("status")PromotionStatus status);

但出现这样的错误。

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 '.count 附近的 order_count, count(user_promotion_history.promotionid) 作为第 1 行的 user_count f'

【问题讨论】:

标签: mysql spring-boot jpa


【解决方案1】:

对于分页,我使用了 Pageable 参数。 @Query(value = "选择promotion.name,promotion.promotion_type,promotion.start_date,promotion.end_date,"+ "promotion_history.count as order_count, count(user_promotion_history.promotionid) as user_count" + "来自推广" + "加入 user_promotion_history" + "promotion.promotionid = user_promotion_history.promotionid" + "加入promotion_history on" + "promotion.promotionid = Promotion_history.promotionid" + "其中promotion.status = ?1" + "分组" + "promotion.name,promotion.promotionid,promotion.promotion_type,promotion.start_date,promotion.end_date,order_count\n-- #pageable\n", 本机查询 = 真) List findByStatus(String status, Pageable pageable);

当我看到查询看起来像这样时, 休眠:选择promotion.name,promotion.promotion_type,promotion.start_date,promotion.end_date,promotion_history.count作为order_count,count(user_promotion_history.promotionid)作为user_count从promotion中加入user_promotion_history onpromotion.promotionid = user_promotion_history.promotionid加入promotion_history关于promotion。 Promotionid = Promotion_history.promotionid wherepromotion.status = ?按promotion.name、promotion.promotionid、promotion.promotion_type、promotion.start_date、promotion.end_date、order_count分组 -- #pageable 按 join.user_count desc 限制排序?

错误说:org.hibernate.engine.jdbc.spi.SqlExceptionHelper Unknown column 'join.user_count' in 'order Clause'

某处“加入”。正在按子句顺序添加。

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 2012-09-28
    • 2010-12-22
    • 2020-12-11
    • 2013-09-29
    • 2020-10-21
    • 2019-01-11
    • 2019-07-29
    • 2018-11-01
    相关资源
    最近更新 更多