2016-05-30 45 views
2

我想知道在Hibernate生成的查詢中設置參數值時,是否可以控制字符串類型(unicode或ANSI)。
問題是我的應用程序中的大部分表都有varchar/char列,而這些列經常出現在各種過濾器中。但是,由Hibernate生成的所有查詢都將參數類型設置爲nvarchar/nchar,使得構建在varchar列上的所有索引幾乎不可用(索引掃描或全表掃描,而不是索引查找/查找)。在休眠狀態下設置參數值時指定字符串類型

作爲一種解決方法,我將sendStringParametersAsUnicode ODBC連接參數設置爲false,這解決了性能問題,但我希望它應該是指定哪個字符串參數必須是Unicode的方式,哪種方法只是簡單的ANSI字符串。

謝謝。

+0

您是否曾經爲此問題找到滿意的答案? – megaflop

+0

@davisog:nope,我結束了'sendStringParametersAsUnicode' – a1ex07

回答

1

我不會在Hibernate或其他地方更改任何問題,因爲這不是在當前層執行此操作的要點。這是一個配置問題,所以當你要配置連接參數(URL),你可以有可採用的配置,你不需要任何Converions等,所以你只能切換URL

如:

jdbc:sqlserver://localhost\MYSERVER;DatabaseName=MyDB;sendStringParametersAsUnicode=false 

如果您將數據庫切換到服務器MySQL或任何其他SQL Server,那麼只需更改配置而不是休眠。我不認爲這是正確的地方..

希望幫助..

,我發現這個名單有幫助:

Vendor    Parameter 
----------------------------------------- 
JSQLConnect   asciiStringParameters 
JTDS    sendStringParametersAsUnicode 
DataDirectConnect sendStringParametersAsUnicode 
Microsoft JDBC  sendStringParametersAsUnicode 

http://emransharif.blogspot.de/2011/07/performance-issues-with-jdbc-drivers.html

歡呼:)

+1

這就是我現在要做的。我不喜歡這種方法是,我不能然後正確設置nvarchar值...在某些情況下,我想'varchar'列,在其他人''nvarhar'。我確定列類型應根據域的要求決定,而不是因爲ORM首選項。 – a1ex07

+0

你見過這個嗎? http://stackoverflow.com/questions/5237280/getting-hibernate-and-sql-server-to-play-nice-with-varchar-and-nvarchar – neoinwonderland

+0

是的,我看到它;它似乎是另一個需要添加用戶定義類型來模仿'PreparedStatement.setString/setNString'功能的黑客攻擊。 – a1ex07

相關問題