我有一个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编写普通查询?
谢谢。
答案 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 '