我想在Hibernate中使用@Where
註釋來移除已被該對象的布爾屬性標記爲「已刪除」的對象。例如,下面的應該防止任何刪除地址從休眠加載:有沒有辦法阻止Hibernate破壞@Where註解中的布爾文字?
@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
您是否記得在休眠設置中指定HSQLDB Dialect? – Affe
是的,我正在使用'org.hibernate.dialect.HSQLDialect',並且我已經仔細檢查過Hibernate是否真的在使用它。 – gutch