首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate + nvl()= Oracle 01465

Hibernate + nvl()= Oracle 01465
EN

Stack Overflow用户
提问于 2013-09-20 11:25:08
回答 1查看 2K关注 0票数 3

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

代码语言:javascript
复制
      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());
         …

查询使用甲骨文的NVL函数来处理null参数。但是,当我运行这段代码时,它会失败,q.getResultList ()调用会出错。

错误如下:

ORA-01465:无效十六进制号

现在,我把这个问题解决了

代码语言:javascript
复制
  q.setParameter("svhlick", (entity.getSvhlick() == null ? " " : entity.getSvhlick()));

但这是解决办法不好.

数据库Oracle11gR2 win1251编码

Netbeans 7.3.1项目编码UTF-8。

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

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

有什么帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2017-01-11 06:16:48

我也有同样的问题,并通过专门的类型来解决,比如:

代码语言:javascript
复制
q.setParameter("svhlick", entity.getSvhlick(), StandardBasicTypes.STRING);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18915598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档