在select子句字段名中使用#时出现Hibernate SQL ORA-01858错误

时间:2016-09-21 21:38:15

标签: sql oracle hibernate

我们在具有SQL查询的应用程序中使用hibernate来获取记录计数和数据。

我们使用类似于下面的查询(其中一些select子句字段名称中包含'#'),例如,

select count(*) as count 
from (
   select distinct field#1, field#2 
   from some_table1 st1, 
        some_table2 
   where st1.id = st2.id 
   and st1.updated_date between to_date(?, 'MM/DD/YYYY HH24:mi:ss) and to_date(?, 'MM/DD/YYYY HH24:mi:ss)
)

查询位于属性文件中,并使用字符串参数化方法替换绑定变量。

使用log4j2参数将日志信息打印到控制台。

  <Logger name="org.hibernate" level="debug"/>
   <Logger name="org.hibernate.SQL" level="debug"/>
  <Logger name="org.hibernate.type.descriptor.sql" level="trace"/>

我能够打印设置到查询的绑定值,但没有看到任何问题。

在我使用eclipse编辑器更改查询的应用程序中,得到了以下异常。

  

WARN org.hibernate.util.JDBCExceptionReporter - SQL错误:1858,SQLState:22008   错误org.hibernate.util.JDBCExceptionReporter - ORA-01858:找到了数字所在的非数字字符

日志打印了SQL查询,并且在Toad for oracle中没有任何问题。

出于某种原因,我注意到文件的来源(不确定它有什么编码)工作没有任何问题, 即使我使用Beyond Compare工具将其合并到我的工作目录,应用程序也能正常工作。

在选择查询的字段名称中使用#时,我不确定eclipse编码是否会引起问题。

这是因为编码问题吗?

- 确认这不是问题,因为编码。

1 个答案:

答案 0 :(得分:0)

尝试使用

SELECT count(*) AS COUNT
FROM
  ( SELECT DISTINCT field#1,
                    field#2
   FROM some_table1 st1,
        some_table2
   WHERE st1.id = st2.id
     AND st1.updated_date BETWEEN to_date(?, 'MM/DD/YYYY HH24:mi:ss') AND to_date(?, 'MM/DD/YYYY HH24:mi:ss') )