首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA 2.0 -原生查询中的NVARCHAR

JPA 2.0 -原生查询中的NVARCHAR
EN

Stack Overflow用户
提问于 2012-03-16 19:40:23
回答 2查看 5.3K关注 0票数 3

我正在处理的项目有以下设置:JPA2.0 (Hibernate 4实现)和SQL Server2008 R2。

我需要从SQL视图中选择一些数据。为此,我使用了原生查询,但我遇到了一些NVARCHAR字段的问题。基本上,在使用这段代码时:

代码语言:javascript
复制
 String sql = "SELECT v.text_field as address FROM SOME_CUSTOM_VIEW v
 Query q = entityManager.createNativeQuery(sql,"ItemDetailsMapping");
 List<Object[]> result = q.getResultList();

ItemDetailsMapping的声明方式如下:

代码语言:javascript
复制
@SqlResultSetMapping(name = "ItemDetailsMapping", columns = { @ColumnResult(name = "address") })

我得到了一个异常,说:

代码语言:javascript
复制
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

类型9实际上是NVARCHAR类型,我们在整个应用程序中广泛使用它,当我们使用非原生查询时,它可以很好地工作。为什么它不能处理原生查询?我甚至使用了自定义方言并注册了类型,但它仍然不起作用。

非常感谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-16 22:17:30

您必须通过会话接口使用Hibernate将数据类型NVARCHAR关联到String.When,您可以使用addScalar()明确设置结果类型(也可以通过JPA2.0中的unwrap()访问):

因此请按如下方式修改代码,

代码语言:javascript
复制
 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();

有关更多信息,请阅读here

(编辑7/1/15 --为清楚起见,添加了引号)

票数 4
EN

Stack Overflow用户

发布于 2013-05-24 01:12:13

你可以这样做:

代码语言:javascript
复制
String myquery = "select cast(t2.name as varchar) column_name from sys.objects t1 inner join sys.columns t2 on t2.object_id = t1.object_id"+ 
" left join sys.indexes t3 on t3.object_id = t1.object_id and t3.is_unique = 1 left join sys.index_columns t4 on t4.object_id = t1.object_id and t4.index_id = t3.index_id and t4.column_id = t2.column_id where (upper(t1.type) = 'U' or upper(t1.type) = 'V') and upper(schema_name(t1.schema_id)) = 'dbo' and upper(t1.name) = 'TEST'"; 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9736574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档