Hibernate动态每行结果数

时间:2014-04-20 16:22:39

标签: java sql hibernate

我正在开发一项功能,允许一些用户定义自己的SQL查询并在数据库上运行它们。

基本上,查询可能如下所示:

1. SELECT first_name, last_name FROM user;
2. SELECT first_name, last_name, id, address, email FROM user.

如您所见,结果表中可能有不同数量的列。 有没有办法在Hibernate中处理这个?

例如,下面显示的基本用法对我没有任何帮助,因为我不能确定每个结果行至少有2列。

Query query = session.getSession().createSQLQuery(queryStr);
ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY);
while (results.next()) { 
    data.put("firstName", String.valueOf(results.get(0)));
    data.put("lastName", String.valueOf(results.get(1)));    
}

此外,我认为我不能使用select new map,因为用户必须运行本机MySQL查询。

这有什么解决方案吗? 提前感谢您的时间和建议!

1 个答案:

答案 0 :(得分:1)

首先,我不认为公开允许SQL输入给用户的接口是个好主意。

无论如何,在您的情况下,您可以自己编写SQL结果集提取。如果不映射到对象,则不需要对象关系映射。然后,您可以检查是否存在列,并将它们立即映射到您的数据结构中。学习普通JDBC的好方法。对于您在应用程序中使用Hibernate处理其他问题的情况,您甚至可以混合使用这些方法。