将Hibernate查询结果作为结果集而不是列表检索

9

嗨, 我是Hibernate的新手。我必须说,它真的为SQL查询简化了一切。然而,目前对返回结果的操作让我头疼不已。

结果以列表形式返回。大多数时候,我真的希望结果是结果集,这样我就可以更容易地操作它,因为使用结果集,您可以通过列名称或索引指定值。在列表中,我被自己的无知所占据。

在某些情况下,我可以将列表检索到JSF数据表中,然后直接调用成员。但我并不总是可以这样做。别问我为什么。@.@ 头晕转。

有没有办法在Hibernate中获取结果集而不是列表?


3
你希望Hibernate返回ResultSet而不是实体列表吗?如果是这样,那你为什么需要使用Hibernate呢? - axtavt
2
展示至少一个ResultSetList<Entity>更好的例子。我真的想不出任何一个。 - BalusC
3
BalusC,我从未说过ResultSet比List更好。我知道Hibernate存在是有原因的。我只是似乎无法按列名解析列表,例如在ResultSet中,我可以使用resultSet.getString(index)或resultSet.getString(columnName)。但在List中,似乎我不能这样做。有什么办法可以解决这个问题吗? - Haikal Nashuha
1
尽管这个帖子有些晚了,但这是为其他寻找这个问题答案的人提供的答案:https://dev59.com/9HE85IYBdhLWcg3wzWzM - craftsman
迟到总比不到好!这是有用的信息@工匠 - Haikal Nashuha
@axtavt 为什么我需要使用Hibernate呢?我需要它来帮我连接数据库。但是在那之后,我并不需要ORM。这就是为什么这个问题12年后仍然有意义的原因。 - Ian Boyd
3个回答

4

虽然这个帖子有点旧,但我还是忍不住要发表一下意见:

    // Code for iterating over a list of objects
    for(MappedClass mappedCless : list){
        String name = mappedClass.getName();
        String id = mappedClass.getId();
        // further logic
    }

4

如果你的数据库很大,而且无法将List结果装入内存中,请使用scroll()替代list():

Query query = session.createQuery(query);
query.setReadOnly(true);
setFetchSize(Integer.MIN_VALUE); //MUST use Integer.MIN_VALUE, other value=fetch all
ScrollableResults results = query.scroll(ScrollMode.FORWARD_ONLY);
// iterate over results
while (results.next()) {
    Object row = results.get();
}
results.close();

2

好的,我设法让它工作了!我很高兴!对于那些试图找到如何操作Hibernate查询返回的列表的人,基本上我所做的就是...

//previous code
list = (List<MappedClass>)query.list();

从那里开始,列表将包含映射类,您可以通过迭代器访问它,并随后使用getter检索值。 例如:

//previous code
for (int i =0; i<list.size(); i ++) {
  String name;
  String id;
  name = list.get(i).getName();
  id = list.get(i).getId();

  //add your data manipulation here
}

希望这能有所帮助。

1
哦,那是你实际的问题吗?以后,请尝试更加仔细地提问。例如,“如何在Java中迭代List对象?”而不是询问如何实现解决方案或不正确/错误的方法。顺便说一句,有更好/更清晰的方法来实现这个,但我会把它作为一个练习留给你 :) - BalusC
有吗?你能告诉我吗?如果我的问题不太容易被社区理解,那我很抱歉,因为我不是以英语为母语的人。 - Haikal Nashuha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接