@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