【发布时间】:2012-05-10 18:19:52
【问题描述】:
我在 MySQL 中有这个查询:
SELECT genre
FROM genre g, person_genre pg, rfid rfid, room room
WHERE
pg.id_genre = g.id and
pg.id_person = rfid.id_person and
rfid.id = room.id_rfid
GROUP BY
g.genre
HAVING COUNT(*) > 1;
输出:布鲁斯、摇滚
这在 mysql 查询浏览器中工作得很好,所以我尝试在我的 jsf 2 中使用 jpa 中的相同查询,所以我这样做了:
public List<String> getListAverageGenres(){
return em.createNativeQuery("SELECT genre " +
"FROM genre g, person_genre pg, rfid rfid, room room " +
"WHERE " +
"pg.id_genre = g.id and " +
"pg.id_person = rfid.id_person and " +
"rfid.id = room.id_rfid " +
"GROUP BY " +
"g.genre " +
"HAVING COUNT(*) > 1").getResultList();
}
输出:蓝调,摇滚,蓝调,摇滚,蓝调,摇滚
我不知道为什么它多次调用同一个查询。 我认为是因为它是本机查询,所以我正在尝试构建一个 jpa 查询并查看它是否有效。
【问题讨论】:
-
在 mysql 中运行相同的查询并作为本机查询应该给出相同的结果。
-
@beerbajay 它给出了相同的结果,但它在 jpa 中进行了 3 次相同的查询,这是为什么呢?
-
听起来其他代码多次调用
getListAverageGenres;查询本身应该返回相同的两行。尝试使用调试器查看该方法何时被调用。