【问题标题】:criteria.setProjection(Projections.rowCount()) returns empty listcriteria.setProjection(Projections.rowCount()) 返回空列表
【发布时间】:2013-05-30 17:04:19
【问题描述】:

我在执行此代码时收到java.lang.IndexOutOfBoundsException: Index: 0, Size: 0有时

Criteria crResult = getSession().createCriteria(XXX.class);
[...]
crResult.setProjection(Projections.rowCount());
Integer countResults = ((Integer)crResult.list().get(0)); // <---This gives the error

crResult.list() 是否可以返回一个空列表?

(澄清一下,我说的不是接收结果为 0 的列表,我说的是接收一个空列表

谢谢!

【问题讨论】:

    标签: java hibernate criteria projection indexoutofboundsexception


    【解决方案1】:

    在这种情况下,您可以使用:

    crResult.uniqueResult()
    

    我不认为你可以获得一个空列表,但在某些情况下你可以获得一个包含 0 个项目的列表,其中没有 .get(0) 索引并抛出你得到的错误......

    您也可以先检查列表长度然后获取项目:

    List<?> list= crResult.list();
    if(list.size>0)
        countResults = (Integer)list().get(0);
    

    【讨论】:

    • 感谢您的回答。您说“在某些情况下,您可以获得一个包含 0 个项目的列表”。你知道什么情况下可以吗?可能是数据库连接错误?谢谢!!
    • 除了没有任何匹配的查询之外,我从未遇到过任何奇怪的情况,我看到 ppl 不知道连接进行 0 匹配,从而导致 0 项目列表,以及其他一些声称发生了一些奇怪的事情会话(例如尝试在休眠异常后重用会话),但这些场景对您处理会话或事务的方式非常特殊。
    猜你喜欢
    • 2012-03-30
    • 2019-08-18
    • 2021-03-11
    • 2015-10-27
    • 2014-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多