【发布时间】:2014-04-02 08:51:02
【问题描述】:
每当我使用 setMaxResult 时,我都在使用带有休眠会话的条件(不是实体管理器),我得到如下异常:
代码段:
crit2.add(criterion).setFirstResult(first);
它和上面一样完美,但是每当我添加 setmax 结果为:
crit2.add(criterion).setFirstResult(first).setMaxResults(max);
我得到异常。我尝试了 2 种方言并得到 2 个不同的例外:
方言: org.hibernate.dialect.SQLServer2008Dialect
何时:它从不给出结果,但总是在下面给出异常
异常: strong> 原因:com.microsoft.sqlserver.jdbc.SQLServerException: '.' 附近的语法不正确。
方言: org.hibernate.dialect.SQLServerDialect
时间:它按预期返回第一页,但每当我尝试获取第二页或更多页时,我都会得到异常: 原因:com.microsoft.sqlserver.jdbc.SQLServerException:仅转发结果集不支持请求的操作。
顺便说一句,我使用的是 Microsoft SQL Server 2008 R2
编辑:
我意识到这是关于土耳其英语字符集差异的问题。 Hibernate 使用每个字段的小写字母,但在 I 中它生成 i 但对于 Sqlserver,I 的小写字母是 ı(如土耳其语)
例如: sonIslemTarihi 是属性名称,休眠将查询创建为 sonislemtarihi 并给出错误,我将查询更改为 sonıslemtarihi 并从 sql server management studio 执行,结果按预期进行。
我该如何处理?
【问题讨论】:
-
您可以更改记录器级别并检查生成的查询吗?
-
@NayanWadekar 我添加了堆栈跟踪以供您参考,但我不能为您提供 sql 查询以不显示项目的域模型(我的公司不允许我这样做)但肯定查询已损坏,尤其是对于 SQLServer2008Dialect。但我无法更改查询,因为我想使用条件。
-
无需实际查询,您可以屏蔽机密数据并更新类似的数据。您也可以发布第一个和最大值。
-
第一页第一个值为0,第二页为10,最大值为10。我现在有点忙,我稍后会发布屏蔽的sql查询。 (顺便说一句,感谢您对@NayanWadekar 的关注)
-
我意识到问题在于土耳其-英语字符集的差异。 Hibernate 使用每个字段的小写字母,但在 I 中它生成 i 但对于 Sqlserver,I 的小写字母是 ı(如土耳其语)例如: sonIslemTarihi 是属性名称和休眠创建查询为 sonislemtarihi 并给出错误,我将查询更改为 sonıslemtarihi 并从 sql server management studio 执行,它按预期工作。我该如何处理?
标签: java sql-server hibernate jpa