繁体   English   中英

如何在HQL中转义关键字“ on”

[英]How to escape the keyword “on” in HQL

这是我要使用Hibernate 4.3.4查询的Entity

@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因为这似乎只是为了逃避一个关键字renameAlias ...

EDIT2:

我正在尝试AliasToMapTransformer但似乎无法使它在where子句中起作用...? 它似乎是为列别名创建的。

EDIT3:

通常,这段代码已经存在了一段时间,奇怪的是它与Hibernate <4.3。$一起工作。

Edit4:

我接受了NimChimpsky的回答,并进行了以下更改:将布尔成员从on重命名为isOn ,但将getter和setter保持不变: setOn()isOn()

无需对我的代码做进一步更改, Hibernate现在感到高兴。

@Column
private boolean deviceIsOn;

用重命名的变量注释字段,然后我的方法是isOn

有点hacky ...但是您保留了友好的OO api,没有太多麻烦。

甚至更简单,只需将其off

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM