2013-09-20 1 views
1

Я получаю ошибку Oracle при попытке выполнить собственный SQL-запрос, который использует значение нулевого параметра. Я варил до этого теста:Hibernate + nvl() = Oracle 01465



     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 Oracle, чтобы обработать нулевые параметры. Однако, когда я запускаю этот код, он не работает с ошибкой в ​​вызове q.getResultList(). Ошибка заключается в следующем:

ORA-01465: invalid hex number 

Теперь я хочу решить эту проблему, как

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

Но this'is решение не является хорошим.

База данных Oracle 11gR2 win1251. Netbeans 7.3.1 кодирование проекта UTF-8. entity.getSvhlick() - String svhlick в Oracle - varchar2 (1)

Я думаю, какая проблема в кодировании разницы. Эти настройки изменяют нежелательные Любые подсказки или предложения?

+0

Используйте вместо COALESCE? – Ben

+0

nvl (t1.svhlick, '') = coalesce (: svhlick, '') it = ORA-00932: непоследовательные типы данных: ожидаемый BINARY, полученный CHAR – asu

ответ