[英]JPA: 'SELECT DISTINCT' with BLOB columns
我正在尝试运行这个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语句中使用,因为该类型不支持比较。”
这个错误对我有意义,但我该如何解决呢?
您可以在另一列中存储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 - 我不确定我的第一个版本是否有效,所以重写了它
来自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)而不是distinct。
BLOB类型的列中的值仅是指向实际数据存储的指针。 为了应用这些操作符中的任何一个,您需要从BLOB加载数据并实现您自己的逻辑,因为数据可以表示任何内容(图像,文本......)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.