【问题标题】:How create this native query in JPA?如何在 JPA 中创建这个本机查询?
【发布时间】: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;查询本身应该返回相同的两行。尝试使用调试器查看该方法何时被调用。

标签: mysql jpa jpa-2.0


【解决方案1】:

你可以试试

SELECT DISTINCT genre

【讨论】:

    猜你喜欢
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 2019-07-22
    • 2017-11-25
    • 1970-01-01
    • 2018-10-27
    • 2013-10-08
    相关资源
    最近更新 更多