我有一個HQL查詢,它使用跨多個表中的數據來提取對象列表。部分查詢需要區分大小寫的比較,但數據庫的默認排序規則不區分大小寫。在單個查詢中將HQL與SQL混合使用
我知道我可以將查詢轉換爲SQL我可以通過指定collate utf8_bin
(我的目標是MySql數據庫)來解決問題,但這需要更復雜的查詢(從代碼理解和維護角度來看),所以我如果可能的話,要儘量避免使用SQL選項。
不幸的是,HQL不包括collate
令牌。
有沒有辦法在HQL查詢中插入SQL片段?
我有一個HQL查詢,它使用跨多個表中的數據來提取對象列表。部分查詢需要區分大小寫的比較,但數據庫的默認排序規則不區分大小寫。在單個查詢中將HQL與SQL混合使用
我知道我可以將查詢轉換爲SQL我可以通過指定collate utf8_bin
(我的目標是MySql數據庫)來解決問題,但這需要更復雜的查詢(從代碼理解和維護角度來看),所以我如果可能的話,要儘量避免使用SQL選項。
不幸的是,HQL不包括collate
令牌。
有沒有辦法在HQL查詢中插入SQL片段?
你可以嘗試像下面
@Column(名稱=的 「uuid」,columnDefinition = 「VARCHAR(23)COLLATE utf8_bin」)
參考:https://forum.hibernate.org/viewtopic.php?f=9&t=998806&view=next
這將永久設置列的排序規則,這是不希望的這種情況 - 我只想在單個查詢期間使用不同的排序規則,而不對列進行更改。 –
哦,好的。你可以嘗試直接在HQL中放置collate子句,即將其餘的查詢放在HQL中,並在該查詢中放置像SLQ這樣的排序子句。我從來沒有試過這個,但是因爲按照aboce exampel,collate在列中是允許的,那麼它在查詢中也應該可以正常工作。可能是HQL將保持整理子句,因爲它沒有改變它。試一試。 –
這也許[SO問題/答案](http://stackoverflow.com/questions/1538577/mix-hql-and-sql-in-the-same-query)可以幫助你 – Yaroslav