如何知道 Hibernate 中原生 SQL 查询结果的类型?

Posted

技术标签:

【中文标题】如何知道 Hibernate 中原生 SQL 查询结果的类型?【英文标题】:How to know the type of a native SQL query result in Hibernate? 【发布时间】:2015-07-29 14:47:51 【问题描述】:

我在 Hibernate 中有一个原生 SQL 查询。我通过以下方式获得查询结果: List l = query.list()

我知道列表的每个元素对应于结果表的一行。但是这些元素的类型是什么?

Java 告诉我它们的类型是:对象。好的,但我想要更多。因为我想在 Eclipse 控制台中打印结果。但为此,我必须知道类型,我必须知道这个列表究竟包含什么。

这是我在 SL Developer 中获得的查询结果表:

知道,我想在 Eclipse 控制台中打印所有数据

在 Eclipse 中,我使用 Query query = session.createSQlQuery("my query"); List l = query.list();`

有关信息,这里是 SQL 查询代码:

【问题讨论】:

取决于底层表结构。你能告诉我们你如何“打印”结果(因为System.out.println()可以处理Object)? 我通过以下命令打印结果:System.out.println(l.get(0));System.out.println(l.get(1));... 但它会打印一些奇怪的东西:(java.lang.Object;@4b41587d) 事实上我需要知道l.get(0) 是什么。对应结果表的第一行,ok。但是之后 ?如何打印不同列对应的数据? 好的,我会的,谢谢。 我编辑了我的问题。您可以查看链接以查看表结构吗?事实是如何在 Eclipse 控制台中打印数据?我知道每一列的类型,但我不知道l.get(0) 的类型,因为它是一行。所以它是一个对象,但是如何访问该行的 3 列? 【参考方案1】:

列表中的ObjectObjects 的数组(每列一个)。

您必须迭代(即针对每一行)然后使用列数组:

final List<Object> l = query.list();
for (final Object row : l) 
    final Object[] columns = (Object[]) row;
    // use columns[0],  columns[1] etc
    System.out.println(columns[0]);

【讨论】:

【参考方案2】:

如果我的问题正确,请尝试getClass().getName() 方法,它会为您提供对象的运行时类。更多信息here

【讨论】:

以上是关于如何知道 Hibernate 中原生 SQL 查询结果的类型?的主要内容,如果未能解决你的问题,请参考以下文章

.Net中原生的html按钮如何调用后台代码

如何知道/记录 Hibernate 2 级缓存是不是用于查询?

关于js中原生构造函数的继承

在所有SwiftUI版本(1.0-4.0)中原生实现Charts图表视图之思路

如何保护 Hibernate QBE 查询

如何保护 Hibernate QBE 查询