如何知道 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】:
列表中的Object
是Object
s 的数组(每列一个)。
您必须迭代(即针对每一行)然后使用列数组:
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 查询结果的类型?的主要内容,如果未能解决你的问题,请参考以下文章
如何知道/记录 Hibernate 2 级缓存是不是用于查询?