簡體   English   中英

Hibernate翻譯功能

[英]Hibernate translation capabilities

我們的項目必須能夠在Oracle和SQL Server中運行。 問題是我們有許多HQL +本機查詢,非標准運算符(即bitand和||)和函數(即SUBSTR)在Oracle中運行良好,但在SQL Server中運行不正常。

我想知道Hibernate是否能夠動態地翻譯它們。 我認為使用HQL可能會這樣,因為它創建了一個AST,但我懷疑同樣適用於本機查詢。

附加問題:處理這些麻煩查詢的最佳方法是什么? 條件,子類化,其他......目標不是修改代碼很多。

Thanx提前

為HQL使用自定義方言。 而不是使用||,創建自己的名為concat的函數。 然后,在SQL Server方言中將此添加到構造函數:

registerFunction("concat", new VarArgsSQLFunction(Hibernate.STRING, "", "+", ""));

您不必更改Oracle方言,因為Oracle已經具有concat函數,因此它只是通過,但對於其他函數,您可能需要在兩者中注冊新函數。

對於SQL查詢,因為無論如何都要動態構建它們,所以可以使用基類方法,例如super.addBitAndClause(leftSide,rightSide)。

你甚至可以動態地使用方言,雖然Hibernate通過加入界面並不容易:

Dialect d = ((SessionFactoryImpl)sessionFactory).getDialect()

我建議將HQL查詢從代碼移動到外部.hbm文件,並在切換數據庫之前使用命名查詢。 正如您所說,HQL查詢應該不是問題。 本機查詢是一個問題,您必須找到其他DBMS的等效項。 但是通過將查詢放入外部文件,您可以將sessionfactory配置為使用特定於數據庫的.hbm文件,而不需要更改僅依賴於可以是本機查詢或HQL的命名查詢的代碼。命名查詢您可以執行以下操作:

Query query = session.getNamedQuery("YourNamedHQLorSQLQuery");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM