java,hibernate.initialize()的奇怪行为

时间:2014-01-21 11:07:25

标签: java hibernate

当我使用Hibernate使用.initialize()编辑的对象执行一些基本检查时,我注意到一种奇怪的行为。

以下'if condition'即使应该通过也会失败:

        for (int j = 0; j < trcList.size(); j++)
        {
            if (trcList.get(j).getABC().getId() == abc.getId())
            {                   
                //do something
                break;
            }
        }

但是,如果我略微改变它,它会在预期的地方通过。在下面的代码段中,我在局部变量中获取LHS值并将其用于比较:

        for (int j = 0; j < trcList.size(); j++)
        {
            int x = trcList.get(j).getABC().getId();
            if (x == abc.getId())
            {                   
                //do something
                break;
            }
        }

trcList是一个使用hibernate从数据库中获取的对象数组创建的ArrayList。包括'ABC'在内的那些对象中的各个字段都是Hibernate.initialize()'ed。

    Session session = null;
    try {
        session = HibernateUtil.initializeHibernateConnection(session);
        Criteria cr = ... //specify search criteria

        List results = cr.list();
        TRC[] trcArray = new TRC[results.size()];
        for (int i = 0; i < results.size(); i++) {
            trcArray[i] = (TRC) results.get(i);

            if (trcArray[i].getABC() != null)
            {
                Hibernate.initialize(trcArray[i].getABC());
            }
        }

        session.getTransaction().commit();
        return trcArray;
    } catch (RuntimeException re) {
        log.error("get failed", re);
        throw re;
    }

1 个答案:

答案 0 :(得分:2)

我怀疑trcList.get(j).getABC().getId()java.lang.Integer,因此应与equals()进行比较

if (trcList.get(j).getABC().getId().equals(abc.getId())) {

}

以下测试将断言相同的

Integer i = new Integer(1); //set to 1
Integer j = new Integer(1); //also set to 1

System.out.println(i == j); //false, because it is reference comparison
System.out.println(i.equals(j)); //true