如何获取自定义对象列表,如以下查询结果:
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和类别中的产品数量的地图。
使用JPA2.0和EclipseLink impl
对于第一个问题:自定义对象列表(没有表对象):
回答:创建一个自定义模型,并使用@Entity和@Id
@Entity
public class QueryModelDTO implements Serializable{
@Id
private Integer categoryId;
private int count;
---gets and sets
}
创建查询并执行
QueryModelDTO qm = (QueryModelDTO) em.createQuery(
"SELECT p.category.id as categoryId, count(p.id) as count FROM Product p
left join p.category c WHERE p.seller.id=:id
GROUP BY c.id",QueryModelDTO.class)
.setParameter("id", id).getSingleResult();
第二:如何在地图上读取响应
回答:使用查询点和结果类型(这是@DannyMo答案的一个变体)
Query q = em.createNativeQuery("SELECT * FROM Foo f");
q.setHint(QueryHints.RESULT_TYPE, ResultType.Map);
List<Map> lm = q.getResultList();
for (Map map : lm) {
for (Object entry : map.entrySet()) {
Map.Entry<DatabaseField, Object> e = (Map.Entry<DatabaseField, Object>) entry;
DatabaseField key = e.getKey();
Object value = e.getValue();
log.debug(key+"="+value);
}
}
我希望这有帮助
假设您使用的是hibernate(标记),可以尝试下面的HQL查询,我还没有测试。
从产品p中选择新映射(p.category.id作为category\u id,count(p.id)作为id\u count)左加入p.category c,其中p.seller。id=:按c.id分组的id
不幸的是,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]);
问题内容: 如何获取自定义对象列表,例如查询以下结果: 例如: 我需要一张带有类别ID和类别中产品数量的地图。 问题答案: 不幸的是,JPA没有提供一种标准的方法来检索中的结果。但是,通过遍历结果列表来手动构建地图非常简单:
我想使用以下查询获得结果列表: 我在它的实体类中使用了它,但我得到了异常: 当用户成功登录应用程序时,将获得matricula字段。应该通过CDI在NamedQuery中设置它来查询数据库。matricula字段位于另一个不同于此处映射的表中。 如何设置注入的setsionChave字符串在参数的矩阵,这是XRlzConsolado类类型? 豆子: 有3个实体:XRlz、XRlzConsolado
在我的示例中,如何使用JPA CriteriaBuilder(如hibernate Criteria)这样的标准进行选择? 和
我使用criteriaBuilder为特定类型创建criteriaQuery。 我需要在使用EntityManager的createQuery方法时限制查询的结果。 但我也需要知道有多少结果我可以得到没有限制,因为我需要它来计算页数的分页系统。 所以我使用了另一个criteriaQueryObject来创建一个选择计数
你们知道如何忽略嵌套的“results”属性并直接获得列表吗?在这种情况下真的需要自定义反序列化器或包装器类吗? 谢了!
我有一个问题 我有DTO 我的格言1。如何修复此错误以及此错误的含义?2.有没有更容易的方法得到这个结果?