2014-04-02 150 views
0

我使用的標準與Hibernate的Session(未實體管理器),每當我用setMaxResult我得到異常如下:休眠setMaxResult導致異常

代碼段:

crit2.add(criterion).setFirstResult(first); 

它可以完美如上,但每當我添加setmax結果爲:

crit2.add(criterion).setFirstResult(first).setMaxResults(max); 

我得到異常。我試過2種方言,並得到2個不同的例外:

方言: org.hibernate.dialect.SQLServer2008Dialect
當:它永不放棄的結果,但總是給人低於
異常例外:產生的原因:COM .microsoft.sqlserver.jdbc.SQLServerException:「。」附近的語法錯誤。

方言: org.hibernate.dialect.SQLServerDialect並
當:它返回預期的第一頁,但每當我試圖讓第二個或更多的頁面,我得到
例外:產生的原因:COM。 microsoft.sqlserver.jdbc.SQLServerException:僅前向結果集不支持請求的操作。

順便說一句,我使用的Microsoft SQL Server 2008 R2

編輯:

,我意識到它是關於土耳其語 - 英語字符集的差異問題。使用Hibernate各個領域的下一封信,但我把它生成我但我sqlserver的lowerletter是I(如土耳其)

例如:sonIslemTarihi是屬性名稱和Hibernate創建查詢作爲sonislemtarihi並給出了錯誤,我改變了查詢爲sonıslemtarihi並從SQL Server管理工作室執行,並按預期工作。

我該如何處理?

+0

您可以更改記錄器級別並檢查生成的查詢。 –

+0

@NayanWadekar我爲你的信息添加了stacktraces,但是我不能給你sql查詢不透露項目的域模型(我的公司不允許我),但是肯定查詢特別是SQLServer2008Dialect受到了損壞。但我無法更改查詢,因爲我想使用條件。 – bdogru

+0

無需實際查詢,您可以屏蔽機密數據並更新類似的數據。你也可以發佈第一和最大值。 –

回答

0

[添加答案,因爲它是越來越太長,不適合評論]

我沒有太多熟悉MS-SQL,但是org.hibernate.dialect.SQLServer2008Dialect似乎是正確的話。

<property name="hibernate.connection.CharSet">utf8</property> 
    <property name="hibernate.connection.characterEncoding">utf8</property> 
    <property name="hibernate.connection.useUnicode">true</property> 
    <property name="hibernate.connection.defaultNChar">true</property> 

有數據庫的字符編碼&由休眠生成的所述一個之間的一些錯配。嘗試更改這些配置參數&觀察生成的查詢。

+1

它沒有工作,仍然是同樣的結果。問題是每當我添加setMaxResult(max)時,hibernate將查詢的所有字符都改爲小寫,但除非它,hibernate使用正常的格式。有什麼辦法可以阻止Hibernate將所有字符改爲小寫? – bdogru

+0

@bdogru如果您的數據庫位於土耳其語語言環境中,則還需要在fibernate配置中配置它,可能還需要[tr_TR]。也可以參考這個鏈接 - https://hibernate.atlassian.net/i#browse/HHH-8765其固定我認爲,看看你的休眠版本。 –