JPA,实体管理器,选择许多列并获取结果列表自定义对象

2022-09-02 20:03:34

如何获取自定义对象列表,如查询下面的结果:

SELECT p.category.id, count(p.id) FROM Product p left join p.category c WHERE p.seller.id=:id GROUP BY c.id

例如:

return getEntityManager().createQuery("SELECT p.category.id, count(p.id) FROM Product p left join p.category c WHERE p.seller.id=:id GROUP BY c.id").setParameter("id", id).getResultList();

我需要一张包含类别 ID 和类别中产品数量的地图。


答案 1

遗憾的是,JPA 没有提供在 .但是,通过遍历结果列表手动构建地图非常简单:Map

TypedQuery<Object[]> q = getEntityManager().createQuery(
    "SELECT c.id, count(p.id) " +
    "FROM Product p LEFT JOIN p.category c " +
    "WHERE p.seller.id = :id " +
    "GROUP BY c.id", Object[].class).setParameter("id", id);

List<Object[]> resultList = q.getResultList();
Map<String, Long> resultMap = new HashMap<String, Long>(resultList.size());
for (Object[] result : resultList)
  resultMap.put((String)result[0], (Long)result[1]);

答案 2

假设你正在使用hibernate(tagged),可以试试下面的HQL查询,我还没有测试过。

SELECT new map(p.category.id as category_id, count(p.id) as id_count) FROM Product p left join p.category c WHERE p.seller.id=:id GROUP BY c.id


推荐