我試圖運行此JPQL查詢:JPA: 'SELECT DISTINCT' 與BLOB列
SELECT DISTINCT i FROM Table i JOIN i.other o
其迅速失敗:
「內部異常:java.sql.SQLException中:類型'BLOB'的列不能用於CREATE INDEX,ORDER BY,GROUP BY,UNION,INTERSECT,EXCEPT或DISTINCT語句,因爲該類型不支持比較。
這個錯誤對我有意義,但我該如何解決它?
我試圖運行此JPQL查詢:JPA: 'SELECT DISTINCT' 與BLOB列
SELECT DISTINCT i FROM Table i JOIN i.other o
其迅速失敗:
「內部異常:java.sql.SQLException中:類型'BLOB'的列不能用於CREATE INDEX,ORDER BY,GROUP BY,UNION,INTERSECT,EXCEPT或DISTINCT語句,因爲該類型不支持比較。
這個錯誤對我有意義,但我該如何解決它?
你可以存儲在另一列中的BLOB對象的散列或校驗,並使用您的不同運營商上。
例子:
SELECT i from Table WHERE id IN (
SELECT id FROM (
SELECT MIN(id) AS id, hash_of_i FROM Table GROUP BY hash_of_i
) t
)
我敢肯定,你可以更優雅地寫SQL,但它會給你一個想法。
編輯 - 只是意識到使用此您可以使用DISTINCT運算符完全免除(這將是功能相當的只是移除)。
編輯2 - 我不知道我的第一個版本的工作,所以在BLOB類型的列重寫了它
值只是指向實際的數據存儲。爲了應用這些運營商需要從BLOB加載數據,並實現自己的邏輯,因爲數據可以表示任何內容(圖像,文本......)
從HermanD一些靈感導致我這個工作解決方案:
SELECT i FROM Table i WHERE EXISTS (
SELECT e FROM Table e JOIN e.other o WHERE e.id=i.id
)
使用setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)而不是查詢中的不同。
您正在使用的數據庫?這將會是有益的知道... – 2009-01-26 16:24:40
我使用Java DB(德比)和的EclipseLink – Cogsy 2009-01-26 16:26:46