私は Hibernate を使用してデータを取得する Java アプリを作成しています。私のアプリには、ユーザーが入力した SQL コマンド文字列を受け取る入力テキスト領域があり、それを Hibernate を介して実行して、ユーザーがクエリするデータを取得するので、私はしません。結果テーブルがどのように見えるかを事前に知っているため、列名はわかりませんが、データフィールドに関連する列名を持つテーブルにユーザークエリの結果を表示する必要があります.Hibernateでそれを達成するにはどうすればよいですか? 私は次のコードを試しました:
Session session=HibernateUtil.getSession();
session.beginTransaction();
Query q=session.createQuery(hql);
AliasToEntityMapResultTransformer INSTANCE=new AliasToEntityMapResultTransformer();
q.setResultTransformer(INSTANCE);
List<Map<String,Object>> aliasToValueMapList=q.list();
for (Map<String,Object> map : aliasToValueMapList)
for (Map.Entry<String,Object> entry : map.entrySet()) System.out.println(entry.getKey()+" - "+entry.getValue());
次のエラーメッセージが表示されました: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: sakila.entity.Actor cannot be cast to java.util.Map
私はHibernateが初めてなので、最初のforループを指しています。それが実行可能かどうかわかりません。上記のコードを修正するにはどうすればよいですか? 私の場合に動作するサンプルコードを誰かに見せてもらえますか?
編集: Marcel Stör が以下で述べたように、両方の状況が発生することを許可し、ユーザーがデータを照会する能力を制限しないようにする必要があります。それを行う最善の方法は何ですか?