Есть ли способ остановить Hibernate от искажения логических литералов в аннотациях @Where?

Я хотел бы использовать аннотацию @Whereв Hibernate для удаления объектов, которые были помечены как «удаленные» логическим свойством этого объекта. Например, следующее должно предотвратить загрузку любых удаленных адресов Hibernate:

@OneToMany(mappedBy="contact")
@Where(clause="deleted=FALSE")
private Set<Address> addresses; 

Однако, когда я использую такое предложение, как delete=FALSE, тогда Hibernate искажает логический литерал, добавляя к нему префикс имени таблицы, который приводит к сбою запроса. Например:

select ... from address address0_ where  ( address0_.deleted=address0_.FALSE)  and address0_.contact_id=?

Я ожидал что-то вроде (address0_.deleted=FALSE)вместо (address0_.deleted=address0_.FALSE).

Есть ли способ указать предложение @Where или настроить Hibernate для правильного вывода логического значения?


ПС. Обратите внимание, что с некоторымибазами данных можно указать логическое значение в виде строкового литерала, например:

@Where(clause="deleted='FALSE'")

Это будет преобразовано в (address0_.deleted='FALSE'), который отлично работает, например, в PostgreSQL. Однако я использую HSQLDB для этого проекта, и HSQLDB, похоже, не поддерживает логические строковые литералы. В HSQL я получаю следующее исключение при использовании delete='FALSE':

org.hsqldb.HsqlException: исключение данных: недопустимое значение символа для приведения

7
задан gutch 24 May 2012 в 03:12
поделиться