【问题标题】:PSQLException: ERROR: could not identify an equality operator for type xmlPSQLException:错误:无法识别 xml 类型的相等运算符
【发布时间】:2016-12-07 11:48:59
【问题描述】:

JPQL:

select distinct ref 
FROM Data d 
  inner join d.reference ref 
WHERE d.role = 'admin'  
ORDER BY ref.id

此 JPA 查询失败并出现以下错误:

PSQLException: 错误: 无法识别类型的相等运算符 xml

版本:PostgreSQL 9.3 和 JDK 1.7

Data 实体包含一个 xml 类型字段。查询中的ref 指的是Data 类型的对象,即Data 实体本身是指Data 类型的对象。 如果我们将 PK 字段用于不同但需要返回唯一对象而不仅仅是 id,它将起作用。我们使用的是 JPA 查询语言而不是本机查询。有什么解决办法吗?

【问题讨论】:

    标签: java postgresql hibernate jpa


    【解决方案1】:

    我假设refxml 类型;如果没有,请显示您的表定义。

    您可能必须将ref 转换为text,因为没有为xml 定义相等,如果不知道什么是相等,您将如何处理DISTINCT

    或者,您可以使用不同的数据类型或使用CREATE OPERATORxml 上定义相等运算符。但是什么时候两个 XML 文档相等呢?

    【讨论】:

    • 我猜他使用的是 JPQL 而不是 SQL。 JPQL 不需要“ON”子句,他是跨关系加入的。
    • 是的,我已经给出了 JPQL 查询。 ref 是 Data 类型,即 Data 实体本身具有对另一个 Data 实体的引用。我正在使用 JPA(休眠)获取完整的数据对象。这就是为什么在这种情况下不适用在 PK 字段上强制转换为文本或 DISTINCT 的原因。
    • 我明白了。好吧,如果您使用的 ORM 非常有限,以至于您无法指定类型转换,您可能会使用不同的数据类型或为 xml 定义相等运算符。
    猜你喜欢
    • 2014-04-30
    • 1970-01-01
    • 2017-09-28
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多