如何将此 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
的包。
注意:我已经测试了解决方案并且有效:)
我收到以下 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
的包。
注意:我已经测试了解决方案并且有效:)