Как преобразовать этот оператор SQL в HQL - PullRequest
0 голосов
/ 31 декабря 2018

Я получил следующий оператор SQL:

SELECT p.category_id, COUNT(p.id)
FROM products p
WHERE p.name ILIKE 'product%'
GROUP BY p.category_id

, и я хочу преобразовать его в HQL этой сущности:

Продукт:

private Long id;

@NotNull
private String name;

@NotNull
private String description;

@NotNull
private String image;

@NotNull
private Double price;

@ManyToOne
private Category category;

что яесть:

@Query("SELECT p.category.id, COUNT(p.id) " +
        "FROM Product p " +
        "WHERE p.name LIKE ?1 " +
        "GROUP BY p.category.id")
List<SearchDetail> findSearchDetailsByName(String phrase);

, но выдает следующую ошибку: https://pastebin.com/h4yBPc7d

Ответы [ 2 ]

0 голосов
/ 01 января 2019

Попробуйте с этим:

@Query("SELECT new com.cm.sb.SearchDetail(p.category.id as category, COUNT(p.id) as count)  " +
            "FROM Product p " +
            "WHERE p.name LIKE ?1 " +
            "GROUP BY p.category.id")
    List<SearchDetail> findSearchDetailsByName(String phrase);

Как видите, вы должны указать в запросе пакет SearchDetail.

Примечание: я протестировал решение, и оно работает:)

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

Я думаю, вам может понадобиться дать псевдонимы выбранным столбцам в вашем запросе, которые соответствуют именам полей в вашем SearchDetail pojo:

@Query("SELECT p.category.id AS category, COUNT(p.id) AS count" +
    "FROM Product p " +
    "WHERE p.name LIKE ?1 " +
    "GROUP BY p.category.id")
List<SearchDetail> findSearchDetailsByName(String phrase);
...