2016-12-07 57 views
0

JPQL:PSQLException:错误:无法识别的等号操作XML类型

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

这JPA查询失败,以下错误:

PSQLException: ERROR: could not identify an equality operator for type xml

版本:在PostgreSQL 9.3和JDK 1.7

Data实体包含一个xml类型字段。查询中的引用引用数据类型对象,即数据实体本身引用数据类型的对象。 这将工作,如果我们使用不同的PK领域,但需要返回唯一的对象不只是身份证。我们正在使用JPA查询语言而非原生查询。任何解决方案?

回答

1

我假设refxml类型;如果没有,则显示你的表格定义。

你可能要投ref键入text,因为平等不是为xml定义,你要如何处理DISTINCT没有什么平等是一个概念?

或者,您可以使用不同的数据类型或使用CREATE OPERATOR来定义xml上的相等运算符。但是,两个XML文档何时相等?

+1

我猜他正在使用JPQL而不是SQL。 JPQL不需要“ON”条款,他正在加入关系。 –

+0

是的,我给了JPQL查询。 ref是Data类型的,即Data实体本身具有对另一个Data实体的引用。我使用JPA(Hibernate)获取完整的数据对象。这就是为什么在这种情况下转换为文本或PK域的DISTINCT不适用的原因。 –

+0

我明白了。那么,如果你使用的ORM比你不能指定类型转换的限制,你可以使用不同的数据类型或者为'xml'定义一个相等运算符。 –