1
我正在使用EntityManager(「em」)並使用方法「createQuery」創建查詢,但它更改我的查詢,如果我使用方法「createNativeQuery」它工作正常,但比我不能添加一個列表參數。JPA正在改變我的查詢,並給我完全錯誤的結果
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();
這裏的問題是,當我打印
System.out.println(q);
我
SELECT t0.ID AS a1 FROM MOVIE t0, TAG t2, TAGGED t1 WHERE (((t2.ID = t1.TAGFK) AND
(t1.MOVIEFK = t0.ID)) AND (t2.NAME IN ?)) GROUP BY t0.ID
HAVING (COUNT(DISTINCT(t0.ID)) = ?) ORDER BY COUNT(t1.ID) DESC, t0.POPULARITY DESC LIMIT ? OFFSET ?"))
如果你仔細看,在查詢:
HAVING count(distinct t2.id) = :size
成爲
HAVING (COUNT(DISTINCT(t0.ID)) = ?)
很明顯,我得到了錯誤的結果,它檢查錯誤的表。
這是一個錯誤還是我做錯了什麼?我無法找到它發生的原因。謝謝。