2012-05-01 170 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轉換爲文本,以便返回文本[]。