![](/img/trans.png)
[英]Getting dynamically generated column names from result of Hibernate native query
[英]How to get column names from Hibernate query result in Java?
我正在编写一个使用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());
它给了我以下错误消息:线程“AWT-EventQueue-0”中的异常java.lang.ClassCastException:sakila.entity.Actor无法强制转换为java.util.Map
它指向1st for循环,因为我是Hibernate的新手,不知道它是否可行,如何修复上面的代码? 有人可以告诉我一些在我的案例中有效的示例代码吗?
编辑:正如MarcelStör在下面提到的,我需要能够允许这两种情况发生并且不限制用户查询任何数据的能力,最好的方法是什么?
用户是否键入SQL或HQL查询? 这些之间有很大的不同。
如果用户键入HQL查询,则可以调用hqlQuery.getReturnTypes()
,然后对于每种类型,您可以执行此帖中建议的任何内容以查找表元数据。
对于像HQL这样的HQL查询,我遇到了同样的问题
select new Map(id as id, name as name) from Person
我用作视图DTO
使用一个或多个记录,我可以遍历作为List<Map<String, Object>
元素的List<Map<String, Object>
。 仅当我需要使用空数据集管理情境时才出现此问题。 就像那种情况一样
public List<String> getAliases(String queryString) {
ArrayList<String> list =
new ArrayList<String>(Arrays.asList(queryString.split("as ")));
List<String> result = new ArrayList<String>();
list.remove(0);
for (String str : list) {
StringTokenizer st = new StringTokenizer(str, ",) ");
result.add(st.nextToken());
}
return result;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.