2011-03-01 56 views
1

我想實現使用最終字符串來定義的參數與IntelliJ IDEA的命名查詢簡單的JPA。但檢查員不喜歡它,並在查詢的第一部分結束時告訴我''意外的標記'到':'。我怎樣才能抑制檢查,或者我怎樣才能說服檢查接受這一點。的IntelliJ是太聰明瞭,我

@NamedQueries({ 
    @NamedQuery(name = TaxonEntity.selectBytaxonId, 
    query = "SELECT t FROM TaxonEntity t WHERE t.taxonId =:" + TaxonEntity.TAXON_ID) 
}) 
@Entity 
public class TaxonEntity { 

static public final String selectBytaxonId = "TaxonEntity.selectBytaxonId"; 
static public final String TAXON_ID = "taxonId"; 
.... 
} 

由於提前,

Medrod

UPDATE: 的IntelliJ IDEA的將接受查詢,如果恆後的字符串將被追加。

@NamedQueries({ 
@NamedQuery(name = TaxonEntity.selectBytaxonId, 
query = "SELECT t FROM TaxonEntity t WHERE t.taxonId =:"+TaxonEntity.TAXON_ID+"") 
}) 

回答

1

作爲解決方法,創建第二個常量,其中包括:

+1

這將工作,但繼電器醜陋。 – Medrod 2011-03-01 14:52:20

+0

絕對,但它的工作原理:-) – 2011-03-01 20:11:12

2

試試這個

@NamedQueries({ 
    @NamedQuery(name = TaxonEntity.selectBytaxonId, 
    query = "SELECT t FROM TaxonEntity t WHERE t.taxonId = " + TaxonEntity.TAXON_ID) 
}) 
@Entity 
public class TaxonEntity { 
    static public final String selectBytaxonId = ":TaxonEntity.selectBytaxonId"; 

或者你可能只是想使整個查詢的常數。它會更具可讀性。

+0

當人們使用符號常量作爲本地標識符時,我總是感到好奇。這是整個常量的東西有點過分。 – musiKk 2011-03-01 14:26:12

+0

我可以理解的基本原理(我曾經自己做了很多),但現在我不認爲這是值得的可讀性。我寧願在註釋中使用內聯字符串,並依靠良好的單元測試讓我知道是否/何時有人在未來發生某些事情。 – 2011-03-01 14:37:57

+1

這沒有任何意義。這個實現背後的想法是在一個站點聲明一個屬性的名稱,並在namedQuery的聲明中使用它,之後創建查詢並將參數提交給查詢。 – Medrod 2011-03-01 14:51:43

0

你在使用什麼SQL數據庫?

我記得在SQL平等運營商==:

想法檢查員抱怨可能不是Java檢查,但SQL檢查。 IDEA非常聰明,知道什麼是。

+0

The:是JPA查詢語言的一部分。通過=:paramerterName,您可以稍後使用參數名稱將特定參數添加到namedQuery。 – Medrod 2011-03-01 14:56:17

+0

感謝您的解釋。 – 2011-03-01 15:49:49