Конвертирование специфических запросов SQL в JPQL - PullRequest
0 голосов
/ 15 ноября 2018

Я ищу эквивалент этого SQL-запроса в JPQL

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;
}

действительно, продукт может иметь несколько версий, но система просто отображаетпродукт с max (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

Спасибо.

1 Ответ

0 голосов
/ 20 декабря 2018

Я наконец получил хороший запрос,

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 для соединения в подзапросе , чтобы выполнить мой ответ.

  1. При использовании подзапроса JPA только позиции в WHERE, поэтому предупреждение Netbeans
  2. INNER JOIN в JPA не принимает подзапрос.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...