繁体   English   中英

JPA:使用BLOB列'SELECT DISTINCT'

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM