Java 休眠每行的动态结果数
我正在开发一个功能,允许一些用户定义自己的SQL查询并在数据库上运行它们 基本上,查询可以如下所示: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
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,我会更深入一层。