2009-01-26 67 views
3

我試圖運行此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語句,因爲該類型不支持比較。

這個錯誤對我有意義,但我該如何解決它?

+0

您正在使用的數據庫?這將會是有益的知道... – 2009-01-26 16:24:40

+0

我使用Java DB(德比)和的EclipseLink – Cogsy 2009-01-26 16:26:46

回答

3

你可以存儲在另一列中的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類型的列重寫了它

0

值只是指向實際的數據存儲。爲了應用這些運營商需要從BLOB加載數據,並實現自己的邏輯,因爲數據可以表示任何內容(圖像,文本......)

2

從HermanD一些靈感導致我這個工作解決方案:

SELECT i FROM Table i WHERE EXISTS (
    SELECT e FROM Table e JOIN e.other o WHERE e.id=i.id 
) 
0

使用setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)而不是查詢中的不同。