Mysql 如何在JPA中创建本机查询?
我在MySQL中有一个查询:Mysql 如何在JPA中创建本机查询?,mysql,jpa,jpa-2.0,Mysql,Jpa,Jpa 2.0,我在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查询
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查询浏览器中运行得很好,所以我尝试在JSF2和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();
}
public List getListAverageGenes(){
返回em.createNativeQuery(“选择流派”+
“来自类别g,个人\类别pg,rfid,房间”+
“哪里”+
“pg.id_流派=g.id和”+
“pg.id_person=rfid.id_person和”+
“rfid.id=room.id\u rfid”+
“分组依据”+
“g.流派”+
“具有计数(*)>1”).getResultList();
}
输出:布鲁斯,摇滚,布鲁斯,摇滚,布鲁斯,摇滚
我不知道为什么同一个问题它已经打了不止一次电话了。
我认为这是因为它是本机查询,所以我尝试构建一个jpa查询,看看它是否有效。您可以尝试使用
SELECT DISTINCT genre
在mysql中运行相同的查询和作为本机查询应该会得到相同的结果。@beerbajay它会给出相同的结果,但在jpa中会进行3次相同的查询,这是为什么?听起来好像其他代码多次调用
GetListAverageGenes
;查询本身应该返回相同的两行。尝试使用调试器查看何时调用该方法。