【问题标题】:Specific SQL to JPQL query convert特定 SQL 到 JPQL 查询转换
【发布时间】:2019-04-18 18:26:28
【问题描述】:

我正在 JPQL 中寻找此 SQL 查询的等效项

SELECT l.*
FROM product_update l
    INNER JOIN (
        SELECT
            ID_PRODUCT,
            MAX(ID) AS maxID
        FROM product_update
        GROUP BY ID_PRODUCT
    ) groupel ON l.ID_PRODUCT = groupel.ID_PRODUCT
        AND l.ID = groupel.maxID
ORDER BY ID DESC 

我的java类

public class ProductUpdate extends BaseEntity {

private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "PRODUCT_UPDATE_SEQUENCE")
@Column(name = "ID")
private Long id;

@JoinColumn(name = "ID_PRODUCT")
@ManyToOne()
private Product product;


@JoinColumn(name = "ID_VERSION")
@ManyToOne()
private Versioning versioning;
}

确实,一个产品可能有多个版本,但系统只显示最大(id)的产品 示例:

1-Product 1 --- Version 1 
2-Product 2 --- Version 1
3-Product 3 --- Version 1
4-Product 1 --- Version 2
5-Product 3 --- Version 2
6-Product 3 --- Version 3

查询刚出来

2-Product 2 --- Version 1
4-Product 1 --- Version 2
6-Product 3 --- Version 3

谢谢。

【问题讨论】:

  • 您是否尝试过自己制作,或者您希望这里有人为您工作?请向我们展示您的尝试。
  • 由于 JPQL 是基于类/字段的,而您还没有发布任何类,为什么不想想人们可能会为此做出什么贡献?!
  • 猜猜看……你还没有发布课程(在你的问题中!)
  • 这就是我所做的SELECT pu FROM ProductUpdate pu INNER JOIN ( SELECT pu.product, MAX(pu.id) AS maxid FROM ProductUpdate pu GROUP BY pu.product ) groupepu ON pu.product = groupepu.produit AND pu.id = groupepu.maxID ORDER BY pu.id DESC。但它在 netbeans 上向我显示了这个警告,联合关联路径不是有效的表达式。这是我的表ProductUpdate (Id, Name FK Product)
  • ^ 请使用格式化的块在问题本身中添加您的尝试。

标签: jpa jpql


【解决方案1】:

我终于得到了很好的查询,

select pu from ProductUpdate pu where pu.id in (select MAX(pUd.id) from ProductUpdate pUd group by pUd.product.id) ORDER BY pu.id DESC. 

我只是使用这个帖子JPA CriteriaBuilder for join in subquery 来执行我的答案。

  1. 使用 JPA 子查询仅定位在 WHERE,因此 Netbeans 警告
  2. JPA 中的 INNER JOIN 不接受子查询。

【讨论】:

    猜你喜欢
    • 2013-09-17
    • 2011-09-29
    • 2020-06-08
    • 2021-10-09
    • 2011-06-12
    • 2019-07-13
    • 1970-01-01
    • 2017-10-29
    • 2011-03-25
    相关资源
    最近更新 更多