这是我的Entity
,我想用Hibernate
4.3.4查询它:
@Entity
@DynamicInsert
@DynamicUpdate
public class Device extends OrmEntity implements Serializable {
@Column(name = "is_on") // was necessary to get Hibernate to create the table at all
private boolean on;
...
}
这是我要执行的HQL(顺便说一下,数据库是
PostgreSQL
):Query query = session.createQuery("from Device where ... and on = :a");
query.setBoolean("a", true);
这给了我
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: on near line 1
。我尝试了很多转义字符,如反勾号,“,[],单引号,但没有成功。
在这个HQL查询中,什么是转义关键字“on”的合适方法?
编辑:
我尝试了
"from Device d where d.on = :a"
,结果是QuerySyntaxException: unexpected token: d near line 1
。我没有尝试
renameAlias
,因为这似乎是为了逃避一个关键字而过度杀人。。。编辑2:
我正在尝试
AliasToMapTransformer
,但似乎无法让它为where
子句工作。。。?它似乎是为列别名而制作的。编辑3:
一般来说,这段代码已经存在了一段时间,奇怪的是,它与
Hibernate
<4.3一起工作$编辑4:
我接受了NimChimpsky的答案,并实现了以下更改:将布尔成员从
on
重命名为isOn
,但保持getter和setter的原样:setOn()
和isOn()
。我的代码不需要进一步修改,现在
Hibernate
很高兴。 最佳答案
@Column
private boolean deviceIsOn;
用重命名的变量注释字段,然后我的方法将是
isOn
。有点黑。。。但是你保留了友好的OO api,没有太多麻烦。
或者更简单一点,只要叫它
off
就行了