Dan*_*ton 3 java hibernate nvarchar sql-server-2008-r2 jpa-2.0
我正在处理的项目具有以下设置:JPA 2.0(Hibernate 4 实现)和 SQL Server 2008 R2。
我需要从 SQL 视图中选择一些数据。为了做到这一点,我使用了本机查询,但我遇到了 NVARCHAR 字段的一些问题。基本上,当使用这段代码时:
String sql = "SELECT v.text_field as address FROM SOME_CUSTOM_VIEW v
Query q = entityManager.createNativeQuery(sql,"ItemDetailsMapping");
List<Object[]> result = q.getResultList();
Run Code Online (Sandbox Code Playgroud)
ItemDetailsMapping 声明如下:
@SqlResultSetMapping(name = "ItemDetailsMapping", columns = { @ColumnResult(name = "address") })
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:
org.springframework.orm.hibernate3.HibernateSystemException: No Dialect mapping for JDBC type: -9; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: -9
Run Code Online (Sandbox Code Playgroud)
类型 -9 实际上是 NVARCHAR 类型,我们在整个应用程序中广泛使用它,当我们使用非本机查询时它可以完美地工作。为什么它不能与本机查询一起使用?我什至使用了自定义方言并注册了类型,但它仍然无法正常工作。
非常感谢你的帮助
您必须将数据类型关联NVARCHAR
到String
。当通过 Session 接口使用 Hibernate 时,您可以显式地设置结果类型addScalar()
(也可以通过unwrap()
JPA 2.0 访问):
所以修改你的代码如下,
String sql = "SELECT v.text_field as address FROM SOME_CUSTOM_VIEW v"
Query q = entityManager.createNativeQuery(sql,"ItemDetailsMapping");
q.unwrap(SQLQuery.class).addScalar("address ", StringType.INSTANCE);
List<Object[]> result = q.getResultList();
Run Code Online (Sandbox Code Playgroud)
阅读此处了解更多信息。
(编辑 2015 年 7 月 1 日——为清楚起见添加引号)
归档时间: |
|
查看次数: |
6014 次 |
最近记录: |