Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate setMaxResult导致异常_Java_Sql Server_Hibernate_Jpa - Fatal编程技术网

Java 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

我在hibernate会话中使用条件(不是实体管理器),每当我使用setMaxResult时,我会得到如下异常:

代码段:

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版本。