次のように、Spring-orm と HibernateTemplate を使用してネイティブ SQL クエリを実行しています (参照用の DB は Oracle 11 です)。
@Override
public List<Object> executeNativeQuery(final String queryStr, final Map<String, String> params) {
List<Object> results = this.template.execute(new HibernateCallback<List<Object>>() {
@Override
public List<Object> doInHibernate(Session session) throws HibernateException, SQLException {
// Get the query
Query query = session.createSQLQuery(queryStr);
// Assign parameters to the query, if any
if (params != null) {
for (Map.Entry<String, String> entry : params.entrySet()) {
query.setString(entry.getKey(), entry.getValue());
}
}
// fire the query
@SuppressWarnings("unchecked")
List<Object> res = query.list();
return res;
}
});
return results;
}
クエリを正常に実行し、結果を返すことができました。しかし、結果の列名も取得する方法がわかりませんでした。このアプローチでは不可能だと思い始めています。私の問題は、ユーザー入力からのクエリを実行する必要があり、パラメーター名についての手がかりがないことです。
何か案は?