我正在尝试运行此 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
)
BLOB 类型的列中的值只是指向实际数据存储的指针。为了应用这些运算符中的任何一个,您需要从 BLOB 加载数据并实现您自己的逻辑,因为数据可以表示任何东西(图像、文本......)
在您的查询中使用 setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY) 而不是 distinct。