У меня есть приложение, написанное на grails 2.2.5, которое должно подключаться к MySQL, Oracle и SQL Server в зависимости от моих клиентов. У нас есть более 1000 запросов, в которых используются отдельные возвращаемые экземпляры классов.
Пример:
import br.com.aaf.auditoria.*
def query="select distinct tipo from Atividade c join c.tipoAtividade tipo order by tipo.nome"
def ret=Atividade.executeQuery(query)
Пока все хорошо, но теперь мне нужно включить некоторые столбцы CLOB в oracle, чтобы расширить некоторые поля из VarChar 4000. Когда я это сделаю, эти запросы перестают работать из-за проблемы, заключающейся в том, что Oracle не сравнивает столбцы CLOB.
Ошибка:
ORA-00932: несогласованные типы данных: ожидалось - получил CLOB
Я понимаю, что Grails / Hibernate использует все свойства класса домена, чтобы sql отправлялся в базу данных и возвращался как экземпляр этого класса. Дело в том, что мне нужно только сравнить или сгруппировать идентификатор класса домена, чтобы выделить его, но мне нужно, чтобы результат был экземпляром класса, а не идентификатором, поэтому мне не нужно изменять все запросы .
Кто-нибудь из вас знает способ изменить поведение отдельного HQL в HQL, даже если мне нужно настроить диалект, чтобы уловить, что Hibernate делает при преобразовании HQL в SQL?
Я думаю, что захватить SQL, изменить его, чтобы вернуть и сгруппировать только идентификатор экземпляра, и выполнить «get» в классе домена, прежде чем вернуть его в «executeQuery».