Chciałbym użyć adnotacji @Where
w stanie hibernacji, aby usunąć obiekty, które zostały oznaczone jako "usunięte" przez właściwość boolean dla tego obiektu. Na przykład następujący powinno zapobiec usunięte adresy z ładowany przez Hibernate:Czy istnieje sposób na zatrzymanie hibernacji przed uszkodzeniem literałów boolowskich w @ adnotacje?
@OneToMany(mappedBy="contact")
@Where(clause="deleted=FALSE")
private Set<Address> addresses;
Jednak kiedy używać klauzuli podobnego deleted=FALSE
następnie Hibernate będzie magiel logiczna dosłowne poprzedzając go z nazwą tabeli, która powoduje, że zapytanie do zawieść. Na przykład:
select ... from address address0_ where (address0_.deleted=address0_.FALSE) and address0_.contact_id=?
Co spodziewałem się coś (address0_.deleted=FALSE)
zamiast (address0_.deleted=address0_.FALSE)
.
Czy istnieje sposób, aby określić klauzulę @Where lub skonfigurować Hibernate, aby poprawnie wyprowadzić wartość boolowską?
PS. Należy pamiętać, że jest to możliwe z niektórych baz danych, aby określić wartość logiczną jako ciąg dosłownym tak:
@Where(clause="deleted='FALSE'")
To będzie zamieniony na (address0_.deleted='FALSE')
który działa dobrze, na przykład, PostgreSQL. Jednak do tego projektu używam HSQLDB, a HSQLDB nie obsługuje boolowskich literałów łańcuchowych. Na HSQL otrzymuję następujący wyjątek podczas korzystania deleted='FALSE'
:
org.hsqldb.HsqlException: data exception: invalid character value for cast
Czy pamiętasz, aby określić HSQLDB Dialect w konfiguracji hibernacji? – Affe
Tak, używam 'org.hibernate.dialect.HSQLDialect' i sprawdziłem, czy Hibernate faktycznie go używa. – gutch