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 型ではありませんか?それが問題ですか? Pg の XML 型に対する Hibernate のサポートは、貧弱か存在しないかのどちらかであることがわかりました。

配列であることが判明した場合: xml の配列をセットに拡張してみてください。そうすれば、'recs' のクロス結合と残りの結果が返されます。これには、クライアント側でフィルタリングして結果の重複を排除する必要があります。

または、Hibernate で xml[] のダイアレクト タイプ マッピングを記述するか、xml をテキストにキャストして text[] を返すこともできます。

于 2012-05-02T01:24:42.180 に答える