Я хотел бы использовать аннотацию @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: исключение данных: недопустимое значение символа для приведения