我正在开发一项功能,该功能允许某些用户定义自己的 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)));
}
此外,我认为我无法使用选择新 map
,因为用户必须运行 native MySQL 查询。
有什么办法可以解决这个问题吗? 预先感谢您的时间和建议!
最佳答案
首先,我认为公开一个允许用户输入SQL的接口(interface)并不是一个好主意。
无论如何,根据您的情况,您可以自己编程 SQL 结果集提取。如果不映射到对象,则不需要对象关系映射。然后,您可以去检查列是否存在,并将它们立即映射到您的数据结构中。学习普通 JDBC 的好方法。如果您使用 Hibernate 来解决应用程序中的其他问题,您甚至可以混合使用这些方法。
关于java - Hibernate 动态每行结果数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23184762/