我在Oracle中有一个表,其中SC_CUR_CODE列为CHAR(3)
当我做:
Query q2 = em.createNativeQuery("select sc_cur_code, sc_amount from sector_costs");
q2.setMaxResults(10);
List<Object[]> rs2 = q2.getResultList();
for (Object[] o : rs2) {
System.out.println(">>> cur=" + o[0]);
}
我看到了cur=E
,cur=U
而不是cur=EUR
和cur=USD
o[0]
是一个java.lang.Character
我怎样才能得到充分的价值EUR
和USD
?
似乎Hibernate读取类型CHAR(n)
为的值Character
。尝试将其转换为VARCHAR(n)
:
Query q2 = em.createNativeQuery(
"select cast(sc_cur_code as VARCHAR2(3)), sc_amount from sector_costs");
通过Session
接口使用Hibernate时,您可以改为设置一个结果类型addScalar()
(也可以通过unwrap()
JPA 2.0
访问):
Query q2 = em.createNativeQuery(
"select sc_cur_code, sc_amount from sector_costs");
q2.unwrap(SQLQuery.class).addScalar("sc_cur_code", 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>
我想在我的repo中写一个本机查询“Select*in from table”。表名与实体名不同。 运行查询时, 1如果我把实体名称返回表未找到。 2如果我将表名放在查询中,则查询的验证失败。 问题是 如果我使用"Select*from TariffPacks r2..., nativeQuery=true",我得到错误TariffPacks不存在。如果我使用"Select*from RECHAR
我需要通过在Hibernate中执行本机查询获得结果集。虽然我使用的是EntityManager,但查询和结果集可能不是实体。 当我尝试下面的代码时,我得到了一个结果。因为我要求的是一个有值的结果。(Hibernate JPA) 结果是:爱丽丝 当我试图从相同的代码中获得多个select out(查询为select name)时,指定来自fresher_test(其中id=1) 这有一种方法,我可
问题内容: 我有一个关于Hibernate缓存机制的问题。我在文章中已经读到,在hibernate中执行本机SQLquery会使缓存的所有区域无效,因为hibernate不知道它将影响哪个特定实体。在这里,缓存的所有区域都是在讨论二级缓存或二级缓存(一级缓存,二级缓存)或仅二级缓存或仅一级缓存的各个区域吗? 问题答案: 该文章介绍了Hibernate的查询缓存是如何工作的,并原生查询的在现有的高速
我写了原生sql查询,而不是使用hql和面对roblem 超出声明序数参数的位置。记住序数参数是基于1的!职位: 1 和DAO 我读了和hibernate使用0作为第一个索引。 堆栈跟踪 //更新 有趣的是,当我设置查询数值时 我明白了 但是在MySQL中我得到了成功的结果。 我如何决定这个问题?
我想执行以下sql查询 如何使用hibernate 3.0为此编写hql查询 我是这样写的 但它显示了hql语法错误