【问题标题】:ScrollableResults into List referenceScrollableResults 到列表参考
【发布时间】:2012-10-03 07:01:35
【问题描述】:

我必须将可滚动结果引用转换为列表引用。可能吗? 当我尝试转换时,我得到了java.lang.ClassCastException: org.hibernate.impl.ScrollableResultsImpl cannot be cast to java.util.List. 的异常 请提供此问题的解决方案....

【问题讨论】:

    标签: java hibernate collections


    【解决方案1】:

    您不能将ScrollableResults 对象转换为List。投射不会自动为您转换对象。您需要自己创建一个新的List,然后遍历ScrollableResults 并将每一行添加到List 自己:

    ScrollableResults result = ...;
    
    List<...> list = new ArrayList<>();
    
    while (result.next()) {
        list.add(result.get());
    }
    

    【讨论】:

    • 非常感谢... List orderList = new ArrayList();并迭代并将可滚动的结果存储在 orderList 中。根据我的代码要求,我必须在 OrderDTO refrence 中键入 cast 。我的意思是 OrderDTO thisOrder = null;并且在迭代中我必须以这种方式转换 thisOrder = (OrderDTO)orderIterator.next();.. 但它给出运行时异常是 java.lang.ClassCastException: [Ljava.lang.Object;不能转换为 ,,,,.order.db.OrderDTO
    • 同样,您不能将任何任意类型转换为任何其他任意类型。您正在尝试将Object[] 转换为OrderDTO。对象数组根本不是OrderDTO,所以你不能那样转换它。你需要自己编写代码来转换它。
    • 我可以使用 List orderList= new ArrayList() 并将可滚动结果迭代并存储到 orderList ....
    • 是的,但是ScrollableResults 中的每一行都由一组对象组成(行中的每一列都有一个对象)。您需要自己将这些列转换为 OrderDTO 对象。
    • 我试过了...但是编译器只是说找不到符号符号:方法add(java.lang.Object[])
    【解决方案2】:

    org.hibernate.impl.ScrollableResultsImpl 没有实现java.util.List 接口。所以你不能把它投射到列表中。 您应该通过调用 next 方法滚动对象并通过ScrollableResultsImpl#getCurrentRow() 获取行值,然后插入到您的列表中。

    ScrollableResults sResult = ...;
    
    List<Object[]> list = any list implementation; like ArrayList/LinkedList...
    
    while (sResult.next()) {
        list.add(result.getCurrentRow());
    }
    

    【讨论】:

    • 据我在 Hibernate API 文档中看到的,ScrollableResults 中没有 getCurrentRow() 方法。不过有一个get() 方法。
    • 是的,你是。它在AbstractScrollableResults 并在ScrollableResultsImpl link 中实现
    猜你喜欢
    • 1970-01-01
    • 2020-05-07
    • 2023-03-21
    • 1970-01-01
    • 2022-08-13
    • 2012-08-04
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多