如何将此 SQL 语句转换为 HQL

How to convert this SQL statement to HQL

我收到以下 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

我认为您可能只需要为查询中与您的 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);

试试这个:

@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 的包。

注意:我已经测试了解决方案并且有效:)