休眠。将字符串参数设置为char 25

时间:2018-02-07 06:30:28

标签: java sql hibernate nativequery

我有一个oracle数据库。我查询表A,其中列b是CHAR(25 BYTE)。当我通过hibernate创建本机查询时 (select t.* from A t where t.b = :b).setParameter("b", "0123456789 ")它返回一个空结果。 当我在' 9'之后创建包含15个空字符的javascript:while(true){console.log("-");} 等本机查询时它按预期返回非空结果。 所以我的问题是 - 如何使用hibernate编写普通查询? 谢谢。

2 个答案:

答案 0 :(得分:0)

如果你肯定要忽略尾随空格,最简单的解决方案(不是最快)就是在HQL中使用rtrim函数:

(select t.* from A t where rtrim(t.b) = :b).setParameter("b", "0123456789")

另一种解决方案是使用用户类型。看看这里:https://developer.jboss.org/wiki/UserTypeForDealingWithFixedLengthCHARFields

答案 1 :(得分:0)

select t.* from A t where t.b = rpad(:b, 25) 

rpad - sql函数在'9'之后向右边添加空白字符。 25 - 这个参数'b'中必须有多少个字符。因此,如果我使用b作为'0123456789'这个函数创建b param为'0123456789 '