2

尝试执行使用空参数值的本机 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)

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

有什么帮助吗?

4

1 回答 1

0

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

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

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

于 2017-01-11T06:16:48.580 回答