2012-10-22 32 views
1

我有一個HQL查詢,它使用跨多個表中的數據來提取對象列表。部分查詢需要區分大小寫的比較,但數據庫的默認排序規則不區分大小寫。在單個查詢中將HQL與SQL混合使用

我知道我可以將查詢轉換爲SQL我可以通過指定collate utf8_bin(我的目標是MySql數據庫)來解決問題,但這需要更復雜的查詢(從代碼理解和維護角度來看),所以我如果可能的話,要儘量避免使用SQL選項。

不幸的是,HQL不包括collate令牌。

有沒有辦法在HQL查詢中插入SQL片段?

+0

這也許[SO問題/答案](http://stackoverflow.com/questions/1538577/mix-hql-and-sql-in-the-same-query)可以幫助你 – Yaroslav

回答

0

你可以嘗試像下面

@Column(名稱=的 「uuid」,columnDefinition = 「VARCHAR(23)COLLATE utf8_bin」)

參考:https://forum.hibernate.org/viewtopic.php?f=9&t=998806&view=next

+0

這將永久設置列的排序規則,這是不希望的這種情況 - 我只想在單個查詢期間使用不同的排序規則,而不對列進行更改。 –

+0

哦,好的。你可以嘗試直接在HQL中放置collat​​e子句,即將其餘的查詢放在HQL中,並在該查詢中放置像SLQ這樣的排序子句。我從來沒有試過這個,但是因爲按照aboce exampel,collat​​e在列中是允許的,那麼它在查詢中也應該可以正常工作。可能是HQL將保持整理子句,因爲它沒有改變它。試一試。 –