簡體   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