2016-03-02 65 views
0

我知道這可能聽起來很愚蠢,但我一直在這個問題上停留太久!JPA原生查詢給出不正確的輸出

我使用本機SQL查詢通過JPA查詢PostgreSQL存儲庫。我的一個疑問的是這樣的:

@Query(value = "select * from gs where ?1 = ?2", nativeQuery = true) 
public List<GsJsonStore> matchJson(String term, String value); 

我使用測試功能:

List<GsJsonStore> list = repo.matchJson("subject", "'Sub'"); 

名單上運行的查詢爲空,但是當我通過PSQL命令行運行相同的查詢使用:

select * from gs where subject = 'Sub'; 

我得到正確的輸出,包含鍵值對的記錄被返回。

我在哪裏犯錯?

+0

一樣,當你調試,怎樣查詢字符串,你得到什麼? –

+1

它們不是相同的查詢。你在JPA中的本地查詢翻譯爲「...... where'subject'='''Sub'''(它總是會給出空的結果)。原生查詢仍使用準備好的語句,您不能將它們用於構建查詢(它們只能用於綁定參數值)。 – pozs

+0

這是休眠曲線: select * from gs where? =? 綁定參數[1]爲[VARCHAR] - ['Sub'] 綁定參數[1]爲[VARCHAR] - [主題] –

回答

1

您不能使用參數作爲列名稱。您的查詢解析爲

select * from gs where 'subject' = '''Sub''' 

編輯:剛纔看到@pozs已經張貼在評論