2015-11-04 28 views
0

我需要優化一個遍歷多個對象的查詢,並且我希望Spring Data能夠讓數據庫處理它。我想用一個HashMap<String,String>,看起來像將整數轉換爲Spring數據中的字符串JPA查詢

2134_9877, 9877 
2134_2344, 2344 
3298_9437, 9437 

結束了SQL是select convert(varchar,b.id)+'_'+convert(varchar,a.id)',a.id from t1 a join t2 b on a.jc = b.jc

到目前爲止,我已經得到了無論-QL中,看起來像倉庫:

@Query("SELECT new map (a.bkey, a.akey) FROM mergeTable a WHERE a.discr= ?1")

問題是,bkey不是唯一的,它只有在與akey配對時纔是唯一的,而且我必須提供它的怪物才能讓它們與下劃線組合:2345_2177

我試圖a.bkey.toString''+a.bkeynew String(a.bkey),只是string(a.bkey)(即最後給出了一個新的異常,但仍然無法正常工作),但春節不喜歡任何這些。我可以找到沒有問題的問題,看來我不能使用SQLServer的convert()函數,因爲這不是SQL。

如何在這個@Query中將整數連接爲帶有下劃線的字符串? PS:使用在SQLServer中調試過的本機查詢會在Hibernate中引發一些奇怪的別名異常,所以我認爲'本土化'被預先確定爲死衚衕。

回答

1

如果我理解正確,'Whatever-QL'被稱爲JPQL,並且可以使用運算符CONCAT。只有使用它,因爲它接受兩個或更多參數取決於您正在運行的JPA版本。

這是答案。

JPA concat operator

+0

不幸的是,CONCAT不可用,直到2012年的SQLServer然而,在鏈接你送我看到的是,雖然2 +「串」不行,「」 + 2 +'串'確實有效。既然你鏈接到另一個問題產生了這個提示,並且int/string轉換是我的特定問題,我將選擇你的答案作爲解決方案。謝謝。 _不幸的是,現在我收到了一個不同的錯誤,所以我會問一個新問題。 – user1944491

1

你可以一個getter添加到您的實體是這樣的:

public String getCombinedKey(){ 
    return a.akey + "_" + a.bkey; 
} 

的好處是,如果你願意,你可以在這裏處理空的和其他的東西,它更可重複使用的情況下,你需要這個在另一個地方。如果您只是在存儲庫中執行此操作,則必須每次都複製它。然後

您所查詢的是:

@Query("SELECT new map (a.combinedKey, a.akey) FROM mergeTable a WHERE a.discr= ?1") 
+0

我知道這不是一件確定的事情,但我希望儘可能將連接推到後端。 SQLServer比Hibernate更有效。不過你的建議是一個很好的設計。 – user1944491