我正在尝试运行此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语句中使用,因为该类型不支持比较。 “
这个错误对我有意义,但我该如何解决它呢?
答案 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。