JPA正在更改我的查询,并给出完全错误的结果

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

我正在使用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 :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)) = ?)