Java Hibernate setMaxResult导致异常
我在hibernate会话中使用条件(不是实体管理器),每当我使用setMaxResult时,我会得到如下异常: 代码段:Java Hibernate setMaxResult导致异常,java,sql-server,hibernate,jpa,Java,Sql Server,Hibernate,Jpa,我在hibernate会话中使用条件(不是实体管理器),每当我使用setMaxResult时,我会得到如下异常: 代码段: crit2.add(criterion).setFirstResult(first); 它的工作原理如上所述,但每当我添加setmax结果时: crit2.add(criterion).setFirstResult(first).setMaxResults(max); 我有例外。我尝试了两种方言,得到了两种不同的例外: 方言:org.hibernate.dialogue
crit2.add(criterion).setFirstResult(first);
它的工作原理如上所述,但每当我添加setmax结果时:
crit2.add(criterion).setFirstResult(first).setMaxResults(max);
我有例外。我尝试了两种方言,得到了两种不同的例外:
方言:org.hibernate.dialogue.sqlserver2008dialogue当:它从不给出结果,但总是在下面给出例外情况
异常:原因:com.microsoft.sqlserver.jdbc.SQLServerException:“.”附近的语法不正确 方言:org.hibernate.dialogue.sqlserverdialogue
何时:它按预期返回第一页,但每当我尝试获取第二页或更多页时,我都会得到
异常:由以下原因引起:com.microsoft.sqlserver.jdbc.SQLServerException:仅转发的结果集不支持请求的操作。
顺便说一句,我使用的是Microsoft SQL Server 2008 R2 编辑:
crit2.add(criterion).setFirstResult(first);
我意识到问题在于土耳其语-英语字符集的差异。Hibernate使用每个字段的小写字母,但在I中生成I,但对于Sqlserver,小写字母I是ı(如土耳其语) 例如:sonIslemTarihi是属性名,hibernate将查询创建为sonIslemTarihi并给出错误,我将查询更改为sonıslemtarihi并在sql server management studio中执行,结果如预期 我如何处理这个问题?[添加答案,因为答案太长,不适合评论] 我对MS-SQL不太熟悉,但是
org.hibernate.dialent.sqlserver2008dialent
似乎是正确的方言
<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>
utf8
utf8
真的
真的
数据库字符编码与hibernate生成的字符编码之间存在一些不匹配。尝试更改这些配置参数并观察生成的查询。您可以更改记录器级别并检查生成的查询。@NayanWadekar我添加了stacktraces以供您参考,但我无法为您提供sql查询,因为它不能显示项目的域模型(我的公司不允许我这样做)但查询肯定会受损,特别是对于SQLServer2008方言。但我无法更改查询,因为我想使用条件。无需实际查询,您可以屏蔽机密数据并更新类似数据。也可以发布第一个值和最大值。第一个值为0表示第一页,第二页为10表示第二页,最大值为10。我现在有点忙,稍后我将发布屏蔽sql查询。(顺便说一句,谢谢你的兴趣@NayanWadekar)我意识到问题在于土耳其语-英语字符集的差异。Hibernate使用每个字段的小写字母,但在I中生成I,但对于Sqlserver,小写字母I是ı(如土耳其语)例如:sonIslemTarihi是属性名,hibernate将查询创建为sonIslemTarihi并给出错误,我将查询更改为sonıslemtarihi,并在sql server management studio中执行,结果与预期一致。我该怎么处理呢?没用,结果还是一样。问题是,每当我添加setMaxResult(max)时,hibernate都会将查询的所有字符更改为小写,但除非如此,否则hibernate将使用正常格式。有没有办法防止Hibernate将所有字符都改成小写?@bdogru如果您的数据库是土耳其语言环境,那么也需要在fibernate配置中配置相同的字符,可能是-[tr_tr]。也可以参考这个链接-我想它是固定的,看看你的hibernate版本。