JPA正在更改我的查询,并给出完全错误的结果
我正在使用EntityManager(“em”)并使用方法“createQuery”创建查询,但它会更改我的查询,如果我使用方法“createNativeQuery”,它工作正常,但无法向参数添加列表JPA正在更改我的查询,并给出完全错误的结果,jpa,Jpa,我正在使用EntityManager(“em”)并使用方法“createQuery”创建查询,但它会更改我的查询,如果我使用方法“createNativeQuery”,它工作正常,但无法向参数添加列表 String query = " SELECT t0.id FROM Movie t0, Tagged t1, Tag t2 " + " WHERE t2.id = t1.tagfk AND t1.moviefk = t0.id AND t2.name in :ta
String query = " SELECT t0.id FROM Movie t0, Tagged t1, Tag t2 "
+ " WHERE t2.id = t1.tagfk AND t1.moviefk = t0.id AND t2.name in :tagList "
+ " GROUP BY t0.id HAVING count(distinct t2.id) = :size "
+ " ORDER BY count(t1) DESC, t0.popularity DESC";
Query q = em.createQuery(query, Integer.class);
q.setParameter("tagList", tagList);
q.setParameter("size", tagList.size());
q.setMaxResults(20);
result = (List<Integer>)q.getResultList();
我得到
如果仔细观察,会发现:
HAVING count(distinct t2.id) = :size
变成
HAVING (COUNT(DISTINCT(t0.ID)) = ?)
很明显,我得到了错误的结果,它检查了错误的表
是虫子还是我做错了什么?我不明白为什么会这样。谢谢。我通过以下方法解决了问题: 第一: 从JPA2.0.X更新到2.1.X 第二: 在HAVING子句中,我添加了SELECT和GROUP BY中使用的列,并添加了一条不影响任何内容的语句:
HAVING t0.id IS NOT NULL AND count(distinct t2.id) = :size
上述解决方案在2.0.X上不起作用,它将导致:
HAVING (COUNT(DISTINCT(t0.ID)) = ?) AND (COUNT(DISTINCT(t0.ID)) = ?)
奇怪
我使用的是Eclipse链接,我忘了提到这一点
它只是工作,但我仍然不满意JPA上的解析器,它需要改进
HAVING t0.id IS NOT NULL AND count(distinct t2.id) = :size
HAVING (COUNT(DISTINCT(t0.ID)) = ?) AND (COUNT(DISTINCT(t0.ID)) = ?)