2012-05-10 27 views
1

我有這個疑問在MySQL:如何在JPA中創建此本機查詢?

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查詢,看看它是否工作。

+0

運行mysql中相同的查詢試圖爲本地查詢應該給予同樣的結果。 – beerbajay

+0

@beerbajay它給出了相同的結果,但它在jpa中做了相同的查詢3次,爲什麼? –

+0

聽起來像其他代碼多次調用'getListAverageGenres';查詢本身應該返回相同的兩行。嘗試使用調試器來查看方法何時被調用。 – beerbajay

回答