Nii*_*ola 13 sql varchar hibernate nvarchar
如果数据库中有2列,例如.
code varchar(3)
name nvarchar(50)
Run Code Online (Sandbox Code Playgroud)
如何通过代码告诉hibernate传递varchar?
在hibernate映射中,字符串映射到nvarchar,它产生如下查询:
Select code, name From table where code=N'AAA' (instead of code='AAA')
Run Code Online (Sandbox Code Playgroud)
这是非常糟糕的,因为它导致索引扫描而不是索引搜索操作(扫描所有索引节点而不是直接转到请求的节点)
由于代码在数百万行以及多个索引和外键中使用,因此将其从varchar更改为nvarchar将导致性能下降(更多IO操作,因为nvarchar使用的空间比varchar多两倍).
有没有办法告诉hibernate根据数据库类型进行映射,而不是Java类型?
谢谢
可能你已经解决了这个问题,但我遇到了类似的问题.
我正在使用jTDS JDBC驱动程序,我通过添加以下内容解决了索引扫描问题:
;sendStringParametersAsUnicode=false;prepareSQL=0
Run Code Online (Sandbox Code Playgroud)
到jTDS连接字符串的末尾.
可能它不会解决您的问题,因为通过这样做,jTDS将只使用VARCHAR(不再使用NVARCHAR).
而且,我必须禁用准备SQL,因为Hibernate使用"喜欢",而不是"="时产生的查询,并通过使用"喜欢"具有可变组合(SELECT ... WHERE LIKE @var列)引起的索引扫描(MSSQL 2000).
<type-mapping>
<sql-type jdbc-type="NVARCHAR" hibernate-type="string" />
</type-mapping>
Run Code Online (Sandbox Code Playgroud)
在 hibernate reveng 文件中添加上述代码。
| 归档时间: |
|
| 查看次数: |
22376 次 |
| 最近记录: |