hibernate SQLQuery之坑一字符串自动截取
用hibernate的doInHibernate接口类进行执行脚本自动截取字段长度
oracle 会将 ‘aa’ 这样的列作为 char 类型类处理,而hibernate 默认则将 char 影射为 Java 的Character类,造成字符串被截断,只显示首个字符,而对于oracle中类型为char的列也同样会出现这种情况。
例子
语句:
select '现汇' AS taskName,
MAX(CASE
WHEN T.POLICY_STAGE = 'stage00' AND T.TASK_TYPE = 'TASK01' THEN
T.STEP_QUOTA01
ELSE
NULL
END) AS task
FROM CIMS.T_POL_TASK T, CIMS.V_BD_SALES_CENTER V
WHERE T.POLICY_STANDARD_ID = 41722
AND T.SALES_CENTER_ID = V.SALES_CENTER_ID(+)
- ORACLE数据库查询 ,查询结果;
taskName | task |
---|---|
现汇 | 0.1 |
- java中hibernate执行结果;
taskName | task |
---|---|
现 | 0.1 |
解决办法
1、数据库脚本解决直接定义字符串长度可以修改类型为varchar2;
语句:
select cast('现汇' AS varchar2(20)) taskName,
MAX(CASE
WHEN T.POLICY_STAGE = 'stage00' AND T.TASK_TYPE = 'TASK01' THEN
T.STEP_QUOTA01
ELSE
NULL
END) AS task
FROM CIMS.T_POL_TASK T, CIMS.V_BD_SALES_CENTER V
WHERE T.POLICY_STANDARD_ID = 41722
AND T.SALES_CENTER_ID = V.SALES_CENTER_ID(+)
2、可以用SQLQuery addScalar(String arg,Type type)方法定义要返回的字段类型.
query.addScalar(‘taskName’,Hibernate.STRING);