有一个关于对象Set方法的问题,请教。

zhongzuo1981 2009-12-09 10:26:04
截取代码中的几行,其中getLzFamilyCheckInfoByFamilyCode对应的是一个hql语句方法。

String familyCode = ParamUtils.getString(request, "familyCode", "");
LzFamilyCheckInfo lzFamilyCheckInfo1 = lzFamilyCheckInfoManager.getLzFamilyCheckInfoByFamilyCode1(familyCode);

……

String districtAuditEnsureType = ParamUtils.getString(request, "districtAuditEnsureType", "");
lzFamilyCheckInfo1.setDistrictAuditEnsureType(new Byte(districtAuditEnsureType));

……

LzFamilyCheckInfo lzFamilyCheckInfo2 = lzFamilyCheckInfoManager.getLzFamilyCheckInfoByFamilyCode2(familyCode);
System.out.pritnln("DistrictAuditEnsureType: "+lzFaliyCheckInfo.getDistrictAuditEnsureType());

……

lzFamilyCheckInfoManager.editOjbect(lzFamilyCheckInfo1);

问题是这样,首先取得lzFamilyCheckInfo1并将其中的一个属性Set新值,然后又取得lzFamilyCheckInfo2,
可打印出来的lzFamilyCheckInfo2中的属性已经是刚才lzFamilyCheckInfo1中Set的那个新值。

用的hibernate,lzFamilyCheckInfo1和2都是LzFamilyCheckInfo的实例,用不同的方法取的记录,再说lzFamilyCheckInfo1还没有保存,lzFamilyCheckInfo1仅仅set了一下,就把数据库里的值给改了。这讲不通啊。

...全文
44 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaining522 2009-12-09
  • 打赏
  • 举报
回复
根据lz说的现象看来
lzFamilyCheckInfoManager.getLzFamilyCheckInfoByFamilyCode2(familyCode) 这个方法在参数相同返回的是同一个对象的引用
所以 lzFamilyCheckInfo1和2 指向的是同一个对象
当 lzFamilyCheckInfo1 修改了这个对象的时候 你用lzFamilyCheckInfo2 返回的值就是新的值了
youjianbo_han_87 2009-12-09
  • 打赏
  • 举报
回复
去看看 Hiberante 对象的三种状态吧,你的这种情况是第二种托管状态,其实他并没有更新的数据库里面,只是将 Session 里面的托管对象设置了值而已。当你用相同的主键获取该对象时,他不会再查询一次DB的,会直接从缓存里面取。。。
longtenggdf 2009-12-09
  • 打赏
  • 举报
回复
看来你还没有明白什么叫hibernate的持久化。当你从数据库里取得lzFamilyCheckInfo1 时,hibernate 就将这个对象持久化了,所谓持久化就是你在之后做的任何对该对象的修改,hibernate都会保持对数据库的同步更新。这也是hibernate的一个重要特性。
如果你不想让hibernate这样做,只需要改变这个对象的持久化状态就可以了。
boboo_2000_0 2009-12-09
  • 打赏
  • 举报
回复
这个问题很难讲,应该是楼主使用的LzFamilyCheckInfo这个class已经封装好了相应的功能。

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧