Hibernate 本機查詢中的MySQL 賦值運算子
使用Hibernate 時,您可能會遇到需要在本機中使用subselect 語句的情況。本機查詢可讓您使用自己的語法直接與底層資料庫互動。
但是,嘗試在Hibernate 內的本機查詢中使用MySQL 賦值運算符(:=) 可能會導致異常:“Space is參數前綴“:”後不允許使用......” 。這是由於 Hibernate 的一個已知問題 (HHH-2697) 造成的。
解決方案
幸運的是,Hibernate 4.1.3 及更高版本已經解決了這個問題。若要在本機查詢中使用 MySQL 指派運算符,您現在可以使用反斜線 () 來轉義。
例如,考慮以下本機查詢:
<code class="sql">SELECT k.`news_master_id` AS id, @row := @row + 1 AS rownum FROM keyword_news_list k JOIN (SELECT @row := 0) r WHERE k.`keyword_news_id` = :kid ORDER BY k.`news_master_id` ASC</code>
要執行此查詢在Hibernate 中,使用以下程式碼:
<code class="java">sessionFactory.getCurrentSession() .createSQLQuery(query) .setParameter("kid", kid) .uniqueResult();</code>
透過使用反斜線轉義賦值運算符,查詢將成功執行。
以上是如何在 Hibernate 本機查詢中使用 MySQL 賦值運算子 (:=)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!