3

我正在尝试运行此 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

4 回答 4

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

于 2009-01-26T16:16:59.510 回答
2

HermanD 的一些灵感让我想到了这个可行的解决方案:

SELECT i FROM Table i WHERE EXISTS (
    SELECT e FROM Table e JOIN e.other o WHERE e.id=i.id
)
于 2009-01-26T17:10:01.803 回答
0

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

于 2009-01-26T16:18:14.920 回答
0

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

于 2015-02-14T17:43:59.030 回答