截取代码中的几行,其中getLzFamilyCheckInfoByFamilyCode对应的是一个hql语句方法。String familyCode = ParamUtils.getString(request, "familyCode", "");
LzFamilyCheckInfo lzFamilyCheckInfo1 = lzFamilyCheckInfoManager.getLzFamilyCheckInfoByFamilyCode(familyCode);
if(lzFamilyCheckInfo1 == null){
    throw new Exception("没有家庭审核记录");
}……String districtAuditEnsureType = ParamUtils.getString(request, "districtAuditEnsureType", "");
lzFamilyCheckInfo1.setDistrictAuditEnsureType(new Byte(districtAuditEnsureType));……LzFamilyCheckInfo lzFamilyCheckInfo2 = lzFamilyCheckInfoManager.getLzFamilyCheckInfoByFamilyCode(familyCode);
System.out.pritnln("DistrictAuditEnsureType: "+lzFaliyCheckInfo.getDistrictAuditEnsureType());……lzFamilyCheckInfoManager.editOjbect(lzFamilyCheckInfo1);问题是这样,首先取得lzFamilyCheckInfo1并将其中的一个属性Set新值,然后又取得lzFamilyCheckInfo2,
可打印出来的lzFamilyCheckInfo2中的属性已经是刚才lzFamilyCheckInfo1中Set的那个新值。这是为什么啊?lzFamilyCheckInfo1还没有保持啊。是否可以用java参数传递方式是按值还是按引用来解释?

解决方案 »

  1.   

    你用的是Hibernate吧. 要看你的lzFamilyCheckInfoManager.getLzFamilyCheckInfoByFamilyCode(familyCode); 是怎么写的了. 如果是find, 那么hibernate会先在session cache中查找, 找不到的时候才访问数据库. 你看一下取lzFamilyCheckInfo1和lzFamilyCheckInfo2的时候, 有几条SQL (show_sql=true)
      

  2.   

    是用的hibernate,刚才改了一下,写了两个getLzFamilyCheckInfoByFamilyCode方法,1和2,语句一样。
    public LzFamilyCheckInfo getLzFamilyCheckInfoByFamilyCode1(String familyCode) {
    String hql = "from LzFamilyCheckInfo c where c.dataFlag=1 and c.abateDate is null and c.familyCode=?";
    return (LzFamilyCheckInfo)super.uniqueResult(hql, new Object[]{familyCode});
    }
    ……
    两个方法都执行了查询语句,还是老问题。
    我想知道,同一个对象的两个实例,把其中一个实例的某个属性set了新值,另一个实例的那个属性会变化么?
      

  3.   

    同一个对象的两个实例,把其中一个实例的某个属性set了新值,另一个实例的那个属性会变化么?
    ==>当然不会. 你设个断点看看lzFamilyCheckInfo1和lzFamilyCheckInfo2是不是同一个对象(看Object Id). 如果你没有改写过它的toString()方法, 也可以直接print一下, 看看是不是一样的.