栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Hibernate本机查询-char(3)列

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Hibernate本机查询-char(3)列

似乎Hibernate读取类型

CHAr(n)
为的值
Character
。尝试将其转换为
VARCHAr(n)

Query q2 = em.createNativeQuery(    "select cast(sc_cur_pre as VARCHAr2(3)), sc_amount from sector_costs");

通过

Session
接口使用Hibernate时,您可以改为设置一个结果类型
addScalar()
(也可以通过
unwrap()
JPA 2.0
访问):

Query q2 = em.createNativeQuery(    "select sc_cur_pre, sc_amount from sector_costs");q2.unwrap(SQLQuery.class).addScalar("sc_cur_pre", StringType.INSTANCE);

从HHH-2220开始,Hibernate
JIRA中有许多与此问题相关的未解决的问题。

以下是HHH-2220评论中的Max Rydahl Andersen的解释:

当前,Hibernate支持从SQL类型到Hibernate / Java类型的一种“自动”映射-
由于这种映射存在很多歧义,因此有时可能与您实际想要的不匹配。

这就是为什么我们总是建议使用显式的addScalar OR的原因,如果您不希望整个代码都使用Dialect的子类来指示您想要多个可能的映射中的哪个。

CHAR的问题是最成问题的,但解决起来并不容易-
我们需要一个registerType(type,from,to,typename)来映射一个范围而不是特定的长度…但是即使那样您也可能碰到映射为模糊性(例如,有时需要数组,而有时需要字符串等),因此建议对任何本机sql查询使用.addScalar-
取决于自动发现将总是有风险的,并且仅应使用最少。

如果您在Hibernate映射配置文件中描述了本机查询,则需要

<return-scalar...>
为每个返回的值进行定义。注意:您必须枚举所有返回的值,因为当您显式定义返回类型时,自动发现将关闭并且仅返回声明的列。

<sql-query name="myQuery">    <query-param name="days" type="int" />    <return-scalar column="count" type="int" />    <return-scalar column="section_name" type="string" />    <![CDATA[select count(id) as count, section_name from document where days <= :days]]></sql-query>


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/495479.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号