JPA:使用BLOB列'SELECT DISTINCT'

时间:2009-01-26 16:13:08

标签: java jpa jql

我正在尝试运行此JPQL查询:

SELECT DISTINCT i FROM Table i JOIN i.other o

迅速失败的地方:

  

“内部异常:java.sql.SQLException:'BLOB'类型的列不能在CREATE INDEX,ORDER BY,GROUP BY,UNION,INTERSECT,EXCEPT或DISTINCT语句中使用,因为该类型不支持比较。 “

这个错误对我有意义,但我该如何解决它呢?

4 个答案:

答案 0 :(得分:3)

您可以在另一列中存储blob对象的哈希值或校验和,并在其上使用您的distinct运算符。

示例:

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 - 我不确定我的第一个版本是否有效,所以重写了它

答案 1 :(得分:2)

HermanD的一些灵感引导我找到这个有效的解决方案:

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

答案 2 :(得分:0)

BLOB类型的列中的值仅是指向实际数据存储的指针。为了应用这些操作符中的任何一个,您需要从BLOB加载数据并实现自己的逻辑,因为数据可以表示任何内容(图像,文本......)

答案 3 :(得分:0)

在查询中使用setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)而不是distinct。