2012-05-01 26 views
2

我創建了一個休眠用戶定義的函數調用BITWISEAND,並在方言構造註冊,如下所示:可以在用戶定義的函數鑑別公式中使用Hibernate的

public SQLServerDialect() { 
    super(); 
    registerFunction("bitwiseAnd", new SqlBitwiseFunction("bitwiseAnd", StandardBasicTypes.INTEGER)); 
} 

我需要做的對於Oracle也是如此,因爲它們在按位操作方面有不同的語法。我一直希望在@DiscriminatorFormula中使用它,但似乎沒有看到註冊的函數。這是可能的,或鑑別器公式只使用本機SQL?

謝謝, R.

回答

3

DiscriminatorFormula鏈接與式的Javadoc,其包含以下的Javadoc:

的公式必須是一個有效的SQL片段。

所以,公式必須是有效的SQL,而不是HQL。

+0

乾杯JB,我想的很多。然而,我希望有人可能會反對這個,並且想到了一些聰明的東西!它強制你在某些情況下使用native SQL的一個病態位,有種擊敗Hibernate IMO的目的! – Ruaghain

+0

請記住,這個公式必須在任何地方使用(當使用session.get(),Criteria API等)時,而不僅僅是在HQL查詢中。還要記住,根據定義,公式用於將數據庫表列中的數據轉換爲實體屬性或轉換爲鑑別器值。如果使用HQL,那麼您將如何引用這些列,因爲根據定義,它們沒有映射到實體屬性? –

+0

啊,當然。我聽到你在說什麼(我在這裏沒有發現hibernate的經驗)。我正在尋找運行HQL的相關對象尚未創建!嗯,我會考慮看看我是否可以改變表格的結構而不需要使用按位運算符。謝謝JB。 – Ruaghain

相關問題