【发布时间】:2017-11-21 10:28:34
【问题描述】:
我的 Web 应用程序中有一个管理控制台,允许管理员对我们的数据库执行自定义 SQL SELECT 查询。
在下面,应用程序正在使用 Hibernate,但这些查询不是 HQL,它们是纯 SQL,所以我使用的是这样的 Native Query:
protected EntityManager em;
public List<Object[]> execute(String query) {
Query q = em.createNativeQuery(query);
List<Object[]> result = q.getResultList();
return result;
}
这可以正常工作,但它只返回数据行,没有额外信息。我还想要获取列名,因此当我将结果打印回用户时,我还可以打印一个标题以显示各个列是什么。
有什么办法吗?
【问题讨论】:
-
您的查询是什么样的?
-
@YCF_L:如果我事先知道,我不会有这个问题,因为我会知道列名;)正如我在问题中所写,这是一个管理控制台,管理员可以在其中键入任何 SQL SELECT 查询并将结果打印在表上。所以任何 SQL 查询都是可能的,只要它是一个 SELECT。
SELECT name, surname FROM users只是举一个愚蠢的例子,但它可以是任何东西。 -
我不确定 Hibernate 是否支持检索查询元数据。纯 JDBC 是您可以使用的选项吗?如果是这样,您可以从包含列标题的 ResultSet 中检索 ResultSetMetaData 对象。
-
将结果类设置为
Tuple,然后你应该得到列/字段的名称和值。标准 JPA API,所以没有真正的理由为什么原生查询不能使用它datanucleus.org/products/accessplatform_5_1/jpa/… -
@BillyFrost:感谢您的建议,但我认为这仅适用于映射实体。正如我所说,我使用的是本机 sql 查询。如果我尝试你的方法,我会得到一个
org.hibernate.MappingException: Unknown entity: javax.persistence.Tuple