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

时间:2014-03-08 22:39:40

标签: java hibernate postgresql hql

以下是我要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,因为这似乎有点过分杀掉一个关键字......

EDIT2:

我正在尝试AliasToMapTransformer,但我似乎无法让它适用于where条款...?它似乎是为列别名。

EDIT3:

一般来说,这段代码已经存在了一段时间,奇怪的是它适用于Hibernate< 4.3。$

Edit4:

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

我的代码无需进一步更改,isOn()现在很高兴。

1 个答案:

答案 0 :(得分:3)

@Column
private boolean deviceIsOn;

使用重命名的变量注释该字段,然后我的方法将为isOn

有点hacky ......但你保持友好的OO api,没有太多麻烦。

甚至更简单,只需将其称为off,而不是保留