当我使用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;
}
答案 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