Hibernate DB2 Returns 使用本机查询时的第一个字符

Hibernate DB2 Returns First Charector while using NativeQuery

我在使用 Hibernate Native Query 从 DB2 CHAR 字段中获取数据时遇到以下问题。

我有一个table结构和数据如下。

 CNTRL_4 COLUMN_ID PARAM
 ------- --------- --------------------
       1         1 10                  
       1         2 12                  
       1         3 true                
       2         1 10                  
       2         2 13                  
       2         3 false               
       3         1 10                  
       3         2 16                  
       3         3 true                

CNTRL_4 和 COLUMN_ID 是数字,但 PARAM 是 CHAR(10)。 如果我 运行 手动执行以下查询(来自 Eclipse SQL 插件),它会获取正确的结果。

SELECT CNTRL_4, COLUMN_ID, VALUE AS PARAM FROM MY_TABLE_NAME 

但是如果我 运行 使用 Java 代码(Hibernate 本机查询)进行相同的查询,那么我将得到以下结果。

[{CNTRL_4=1, COLUMN_ID=1, PARAM=1}, 
 {CNTRL_4=1, COLUMN_ID=2, PARAM=1}, 
 {CNTRL_4=1, COLUMN_ID=3, PARAM=t}, 
 {CNTRL_4=2, COLUMN_ID=1, PARAM=1}, 
 {CNTRL_4=2, COLUMN_ID=2, PARAM=1}, 
 {CNTRL_4=2, COLUMN_ID=3, PARAM=f}, 
 {CNTRL_4=3, COLUMN_ID=1, PARAM=1}, 
 {CNTRL_4=3, COLUMN_ID=2, PARAM=1}, 
 {CNTRL_4=3, COLUMN_ID=3, PARAM=t}]

请查看PARAM数据,只是第一个字符

我正在使用以下 Java 代码

String sql = "SELECT CNTRL_4, COLUMN_ID, VALUE AS PARAM FROM MY_TABLE_NAME";
SQLQuery query = hibernateUtil.getCurrentSession().createSQLQuery(sql);
query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);
List<Map<String, Object>> data = (List<Map<String, Object>>) query.list();
System.out.println(data);

我也在 Google 上搜索,发现这个 blog post,这和我的问题一样。据我所知,我已经通过对 SQL 查询进行类型转换解决了这个问题。但是现在我忘记了我做了什么,现在无法解决。

请帮忙。

更新: 通过类型转换解决问题。请看我的回答。

尝试不使用变压器,因此将您的查询更改为:

String sql = "SELECT CNTRL_4, COLUMN_ID, VALUE AS PARAM FROM MY_TABLE_NAME";
SQLQuery query = hibernateUtil.getCurrentSession().createSQLQuery(sql);
List data = query.list();
System.out.println(data);

这应该只是将查询传递给底层 DB2 驱动程序,所以它应该可以工作,除非 DB2 驱动程序无法将 false 值识别为字符串。

通过类型转换我们可以解决如下问题

SELECT CNTRL_4, COLUMN_ID, RTRIM(CAST (VALUE AS VARCHAR(10))) AS PARAM FROM MY_TABLE_NAME 

解释:

Since VALUE column is defined as CHAR on DB2 and Hibernate is checking the type of the filed while using transformer Criteria.ALIAS_TO_ENTITY_MAP, then it is casting the data to Charecter. So it is returning the first character only.

但是在选择时,如果我们将类型更改为 VARCHAR 那么我的问题就解决了。

有什么不足之处请告诉我。