Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 休眠每行的动态结果数_Java_Sql_Hibernate - Fatal编程技术网

Java 休眠每行的动态结果数

Java 休眠每行的动态结果数,java,sql,hibernate,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 quer

我正在开发一个功能,允许一些用户定义自己的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)));    
}
此外,我认为我不能使用
selectnewmap
,因为用户必须运行原生MySQL查询

有什么解决办法吗?
提前感谢您的时间和建议

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


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

嗨!谢谢你的回复。该接口将仅对开发团队可用。我们正在根据这些查询生成一些统计数据,直接将它们放在某种GUI中比修改后端更容易、更快。我更喜欢使用Hibernate,因为这个结果将作为报告持久化。如果可能的话,我想坚持架构和抽象。@Ionut Ok,听起来很合理。那么,您只是在查询表“用户”吗?谢谢您的时间!
users
select就是一个例子。在我们的具体案例中,查询连接不同的表要复杂一些。基本上,这个查询的结果将有不同数量的列。(可能是5列或20列)我们希望将此结果存储为JSON字符串作为密钥对值。问题是,我无法找到hibernate返回结果项的列数的方法。@Ionut-Mhh,听起来您想使用ElasticSearch或其他工具来存储报表。@Ionut我想了一会儿,但想不出一个简单的方法来轻松地使用hibernate。有时,通用需求需要通用解决方案。对于JDBC,我会更深入一层。