0

我使用本机查询来调用我的 postgresql 数据库中的函数,代码是这样的:

String query = "select details,rec_xml[1] from f_get_reccomendations(\'/ma:recommendations/ma:recommendation/name/text()\') ORDER BY id DESC LIMIT 1;";
Query q = em.createNativeQuery(query); 
return q.getResultList();

函数定义为:

CREATE OR REPLACE FUNCTION f_get_reccomendations (
  IN  xpath    varchar(128),
  OUT id       int,
  OUT recs_num int,
  OUT details  varchar(25),
  OUT d_stamp  timestamp,
  OUT rec_xml  xml[]
) RETURNS SETOF RECORD AS
$$
select id, recs_num, details, d_stamp, xpath($1, recs,
          array [
                  array['xs','http://www.w3.org/2001/XMLSchema'],
                  array['ma','http://schemas.medio.com/analytics/1.0']
                ]
          ) from recommendations;
$$
LANGUAGE SQL;

当从 psql 运行时,它可以工作,但是当我在代码中运行时,它给我带来了错误:没有 JDBC 类型的方言映射:2009

我的猜测是 rec_xml 被定义为休眠无法理解的 xml[] 类型?我该如何解决?谢谢

4

1 回答 1

1

第一:你确定这是 XML 数组,而不是 xml 类型本身,这是问题所在吗?我发现 Hibernate 对 Pg 的 XML 类型的支持介于贫乏和不存在之间。

如果它被证明是数组:尝试将 xml 数组扩展为一个集合,以便返回“recs”的交叉连接和其余结果。这将需要在客户端进行过滤以消除重复结果。

或者,您可以在 Hibernate 中为 xml[] 编写方言类型映射,或者将 xml 转换为文本以便返回 text[]。

于 2012-05-02T01:24:42.180 回答