我使用本机查询来调用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被定义为hibernate无法理解的xml []类型?我该怎么办呢?感谢
答案 0 :(得分:1)
首先:你确定它是XML的数组,而不是它自己的xml类型,这是问题吗?我发现Hibernate对Pg的XML类型的支持介于很差和不存在之间。
如果它被证明是数组:尝试将xml数组扩展为一个集合,这样就可以返回`recs'的交叉连接和其余的结果。这将需要在客户端进行过滤以消除重复结果。
或者,您可以在Hibernate中为xml []编写方言类型映射,或者将xml转换为文本,以便返回text []。