1

私は問題があります。プログラム内の一部の SQL は、ユーザーが作成できます。したがって、このSQLにどのテーブルまたはどの列があるかわかりません。したがって、SQLに含まれる列名を検出したいと思います。しかし、日付がSQLにある場合、JDBCタイプのダイアレクトマッピングがありません:-102エラーが発生します。どうすればそれを処理できますか?Java で hibernate 3.6 または 4.1.3 を使用しています。私のデータベースはオラクルデータベースです。方言は org.hibernate.dialect.Oracle10gDialect です。

SQLに何が入っているのか本当にわかりません。

これが私のコードです:

SQLQuery q=session.createSQLQuery("SELECT * FROM tbl WHERE id = 2"); 
q.setResultTransformer(AliasToEntityMapResultTransformer.INSTANCE); 
List<Map<String,Object>> aliasToValueMapList=q.list();
for(Map<String,Object> map : aliasToValueMapList){
    System.out.println(map.keySet());
    break;
}

誰かがこの問題の解決策を知っていることを願っています。

グリーツ

4

2 に答える 2

3

あなたのクエリは、JDBC ResultSetMetaData が Hibernate が読み取る方法を知らないタイプ (-102) を報告している列を返そうとしています。org.hibernate.SQLQuery#addScalar を使用してその列のタイプをクエリに登録する必要があります。そうしないと、そのトランスフォーマーを使用して、結果セット全体をエンティティ org.hibernate.SQLQuery#addRoot/org にマッピングすることを実際に定義できない場合があります。 .hibernate.SQLQuery#addEntity. 使用方法についてはドキュメントを参照してください

于 2012-06-16T00:54:31.540 に答える
1

session.createQuery() を使用すると、方言を使用して、Hibernate Query Language を使用してデータベースと通信します。ただし、createSQLQuery() を使用する場合は、PL/SQL を使用してオラクルと通信する必要があります。

于 2012-06-15T16:53:16.510 に答える