【问题标题】:Hibernate + nvl()= Oracle 01465休眠 + nvl()= 甲骨文 01465
【发布时间】:2013-09-20 11:25:08
【问题描述】:

尝试执行使用空参数值的本机 SQL 查询时出现 Oracle 错误。我把它归结为这个测试用例:

String SQL_SELECT = "select * from act t1 where t1.G074=:G074 AND t1.G542=:G542 AND nvl(t1.svhlick,' ')=nvl(:svhlick,' ') and t1.svhlic=:svhlic and t1.sf$version = (select max(sf$version) from act t2 where t2.G074=t1.G074 and t2.G542=t1.G542 AND nvl (t2.svhlick,' ')=nvl(t1.svhlick,' ') and t2.svhlic=t1.svhlic)"; Query q = em.createNativeQuery(SQL_SELECT, Act.class); …. q.setParameter("svhlick", entity.getSvhlick()); …

查询使用Oracle 的NVL 函数来处理null 参数。 但是,当我运行此代码时,它会在 q.getResultList () 调用时出现错误并失败。

错误如下:

ORA-01465:  invalid hex number

现在,我解决了这个问题

  q.setParameter("svhlick", (entity.getSvhlick() == null ? " " : entity.getSvhlick()));

但是这个解决方案不好。

数据库 Oracle 11gR2 win1251 编码。

Netbeans 7.3.1 项目编码 UTF-8。

entity.getSvhlick() - 字符串 Oracle 中的 svhlick - varchar2(1)

我认为问题可能是由于不同的编码。

有什么帮助吗?

【问题讨论】:

  • 改用合并?
  • nvl(t1.svhlick,' ')=coalesce(:svhlick,' ') it's= ORA-00932: 不一致的数据类型: 预期 BINARY, 收到 CHAR

标签: hibernate encoding entitymanager nvl


【解决方案1】:

我遇到了同样的问题,并通过指定类型来解决它:

q.setParameter("svhlick", entity.getSvhlick(), StandardBasicTypes.STRING);

https://forum.hibernate.org/viewtopic.php?f=1&t=984725

【讨论】:

  • apptaro。非常感谢您的回复。
猜你喜欢
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 2011-07-19
相关资源
最近更新 更多