Бих искал да използвам анотация @Where
в Hibernate, за да премахна обекти, които са маркирани като „изтрити“ от булево свойство на този обект. Например следното трябва да предотврати зареждането на изтрити адреси от Hibernate:
@OneToMany(mappedBy="contact")
@Where(clause="deleted=FALSE")
private Set<Address> addresses;
Когато обаче използвам клауза като deleted=FALSE
, тогава Hibernate ще обезобрази булевия литерал, като го постави като префикс с име на таблица, което води до неуспех на заявката. Например:
select ... from address address0_ where ( address0_.deleted=address0_.FALSE) and address0_.contact_id=?
Това, което очаквах, е нещо като (address0_.deleted=FALSE)
вместо (address0_.deleted=address0_.FALSE)
.
Има ли начин да посочите клаузата @Where или да конфигурирате Hibernate за правилно извеждане на булевата стойност?
PS. Обърнете внимание, че е възможно с някои бази данни да укажете булевата стойност като низов литерал по този начин:
@Where(clause="deleted='FALSE'")
Това ще бъде преобразувано в (address0_.deleted='FALSE')
, което работи добре в, например, PostgreSQL. Въпреки това използвам HSQLDB за този проект и HSQLDB изглежда не поддържа булеви низови литерали. В HSQL получавам следното изключение, когато използвам deleted='FALSE'
:
org.hsqldb.HsqlException: data exception: invalid character value for cast
org.hibernate.dialect.HSQLDialect
и проверих дали Hibernate действително го използва. - person gutch   schedule 24.05.2012