Mysql 如何在JPA中创建本机查询?

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查询

我在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
;查询本身应该返回相同的两行。尝试使用调试器查看何时调用该方法。