2012-05-01 129 views
0

我使用的原生查询调用一个函数在我的PostgreSQL数据库,代码是这样的:休眠+ JPA + PostgreSQL的:没有dialet映射

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 []类型, rnate无法理解?我该如何解决它?谢谢

回答

1

第一:你确定它是XML的数组,而不是它自己的xml类型,这是问题吗?我发现Hibernate对Pg的XML类型的支持介于穷人和不存在之间。

如果它证明是数组:请尝试将xml数组扩展为一个集合,以便返回`recs'和其余结果的交叉连接。这将需要在客户端进行过滤以去除重复的结果。或者,您可以在Hibernate中为xml []编写方言类型映射,或者将xml转换为文本,以便返回文本[]。