Java 在Hibernate中设置参数值时指定字符串类型
我想知道在Hibernate生成的查询中设置参数值时是否可以控制字符串的类型(unicode或ANSI)。Java 在Hibernate中设置参数值时指定字符串类型,java,hibernate,sql-server-2008,Java,Hibernate,Sql Server 2008,我想知道在Hibernate生成的查询中设置参数值时是否可以控制字符串的类型(unicode或ANSI)。 问题是,我的应用程序中的大多数表都有varchar/char列,这些列通常出现在各种过滤器中。但是,Hibernate生成的所有查询都将参数type设置为nvarchar/nchar,使得构建在varchar列上的所有索引几乎不可用(索引扫描或全表扫描,而不是索引查找/查找) 作为一种解决方法,我将sendStringParametersAsUnicodeODBC连接参数设置为false,
问题是,我的应用程序中的大多数表都有varchar/char列,这些列通常出现在各种过滤器中。但是,Hibernate生成的所有查询都将参数type设置为
nvarchar/nchar
,使得构建在varchar列上的所有索引几乎不可用(索引扫描或全表扫描,而不是索引查找/查找)
作为一种解决方法,我将sendStringParametersAsUnicode
ODBC连接参数设置为false,这解决了性能问题,但我希望这应该是指定哪个字符串参数必须是Unicode,哪个只是简单的ANSI字符串的方法
多谢各位 我不会在Hibernate或其他地方更改任何问题,因为这不是在当前层中执行此操作的重点。这是一个配置问题,因此当您必须配置连接参数(URL)时,您可以在不需要任何转换器等的情况下采用可采用的配置。因此,您只能切换URL e、 g: 如果您将数据库切换到服务器MySQL或任何其他SQL server,那么只需更改配置,而不是Hibernate。我不认为这是个合适的地方 希望对你有帮助 我发现这个列表很有用:
Vendor Parameter
-----------------------------------------
JSQLConnect asciiStringParameters
JTDS sendStringParametersAsUnicode
DataDirectConnect sendStringParametersAsUnicode
Microsoft JDBC sendStringParametersAsUnicode
干杯:)这就是我现在要做的。我不喜欢这种方法的地方是我不能正确设置nvarchar值。。。在某些情况下,我需要
varchar
列,在其他情况下,我需要nvarhar
。我确信列类型应该根据域需求来决定,而不是因为ORM的首选项……你在这里看到过这个吗?是的,我看到了;这似乎是另一种需要添加用户定义类型以模拟PreparedStatement.setString/setNString
功能的黑客行为。您是否找到了这个问题的满意答案?@daiscog:no,我最终得到了sendStringParametersAsUnicode
Vendor Parameter
-----------------------------------------
JSQLConnect asciiStringParameters
JTDS sendStringParametersAsUnicode
DataDirectConnect sendStringParametersAsUnicode
Microsoft JDBC sendStringParametersAsUnicode