запрос нормально работает в SQL-разработчике, но падает в спящем режиме - PullRequest
0 голосов
/ 04 марта 2011

Когда я запускаю это в sqldeveloper:

SELECT   CASE
WHEN TABLE1.COL1 IS NOT NULL
THEN (
CASE
WHEN TABLE1.COL2 IS NOT NULL
THEN TABLE1.COL3
ELSE TABLE1.COL4
END) 
WHEN TABLE1.COL5 IS NOT NULL
THEN TABLE1.COL6
ELSE TABLE1.COL7 END "C" FROM TABLE1

работает нормально. Когда я запускаю это через сеанс Hibernate, он дает:

No Dialect mapping for JDBC type: -101

Все столбцы типа varchar2. col1 имеет номер типа. База данных оракула 10г. Обходной путь также приветствуется, если решение не очевидно :) Кроме того, как я могу узнать, на что ссылается тип JDBC -101? Я видел -1, но не -101 раньше.

РЕДАКТИРОВАТЬ: я попытался использовать скаляр возврата в верхней части именованного запроса Не повезло.
РЕДАКТИРОВАТЬ # 2: Есть ли способ увидеть, что тип данных возвращается для «C». Затем я использую одно из решений, приведенных в ответе.

Ответы [ 3 ]

2 голосов
/ 27 ноября 2012

Эта ошибка возникает, когда мы передаем параметр через запрос, а не вводим значение напрямую.В случае SQL вы можете восстановить то же самое, задав значение C =: S и введя значение в новое сгенерированное текстовое поле.Решение этой проблемы входит в патч обновления, поскольку это ошибка.

1 голос
/ 04 марта 2011

Я никогда не сталкивался с этим в Oracle, но иногда JDBC возвращает странные типы для сложных выражений в запросах, и Hibernate не может разрешить эти типы.

В таких случаях вы можете попытаться добавить явное приведение кзапрос:

SELECT CAST((CASE ... END) AS varchar2) "C" FROM TABLE1
0 голосов
/ 04 марта 2011

Если ответ Axtavt не работает, вы можете определить свое собственное отображение типов, следуя этой схеме:

public class MySQL5Dialect extends org.hibernate.dialect.MySQL5Dialect
{
    public MySQL5Dialect()
    { 
        super(); // register additional hibernate types for default use in scalar sqlquery type auto detection 
        registerHibernateType(Types.LONGVARCHAR, Hibernate.TEXT.getName()); 
    }

}

Конечно, вы должны использовать значение, которое вы получаете вместо longvarchar и соответствующих типов Hiberante.

(Я назвал пример кода здесь: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1483

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...