我想@Where
在 Hibernate 中使用注释来删除已被该对象上的布尔属性标记为“已删除”的对象。例如,以下内容应防止 Hibernate 加载任何已删除的地址:
@OneToMany(mappedBy="contact")
@Where(clause="deleted=FALSE")
private Set<Address> addresses;
但是,当我使用像deleted=FALSE
then 这样的子句时,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