我在DB中有一个列,其类型为char(20),我将列映射如下
<property name="my_cloumn" type="string">
<column name="My_column" sql-type="char(20)">
</column>
</property>
我在db中有这个列的数据,如123456789123456789
当我执行Query.list()时,我只得到第一个char,即'1'
可能导致此问题的原因是什么?
我正在使用Hibernate 3.3
更新1:
我在执行Query.list()
之前执行下面的操作query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
答案 0 :(得分:0)
可能存在HBM错误,该错误无法在整个框架中一致地解析char(20)
数据类型。要明确,请尝试使用此映射:
<property name="my_cloumn" type="string">
<column name="My_column" sql-type="char" length="20" />
</property>
答案 1 :(得分:0)
在Oracle SQL中:
CAST(My_column AS VARCHAR2(20))
在Hibernate中:
cast(my_cloumn as string)
如果底层数据库支持ANSI cast()和extract()
因为您使用的是Oracle,所以这是真的。我尝试使用带有CHAR(20)的CAST,它不能解决问题所以你必须使用VARCHAR2。我的情况是使用Oracle SQL,所以我无法测试我给出的Hibernate示例,但是你明白了。
http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/queryhql.html#queryhql-expressions