各位,大家好。因为公司需要,所以新的项目都数据持久化层改为hibernate。对hibernate不是很熟悉。请大家帮忙看一下我的问题。
比如我在一个方法里先查询出一个A a been.
对这个对象进行一些属性修改a.setUser("XXX");
之后我再我要保存B been的一条数据到数据库。但却发现它顺便帮我update了a的刚刚那条纪录。
我发现如果我不对查出的a对象进行修改,先保存B的,然后再a.setUser("XXX"),这样就不会帮我顺便update a.
我觉得奇怪A和B是不同表的,不同的been,两个表是没有关联的。我只是想保存B的.并不想update a的对象。但hibernate却做了update。
请问这是什么原因呢?谢谢
比如我在一个方法里先查询出一个A a been.
对这个对象进行一些属性修改a.setUser("XXX");
之后我再我要保存B been的一条数据到数据库。但却发现它顺便帮我update了a的刚刚那条纪录。
我发现如果我不对查出的a对象进行修改,先保存B的,然后再a.setUser("XXX"),这样就不会帮我顺便update a.
我觉得奇怪A和B是不同表的,不同的been,两个表是没有关联的。我只是想保存B的.并不想update a的对象。但hibernate却做了update。
请问这是什么原因呢?谢谢
解决方案 »
- OpenCSV 解析生成.csv格式文件,如:0011,用excel打开变成了11。请各位帮忙,谢谢!
- strust2中的if标签问题
- ssh集成时不能穿件actionform
- tomcat 预编译设置
- struts+hibernate 查询
- jbpm4.4流程驳回
- 求助:struts下载问题
- 小妹想问:在tomcat中图片验证码调试可以通过,为什么在resin中图片验证码都不能正常显示!!
- 求<<精通Struts:基于MVC的Java Web设计与开发>>电子书及附书源码!!!
- EJB-QL在jboss 3.2里的问题
- 如何从web页面调用JMS从而实现消息即时通讯,类似于WEBQQ
- HTTP Status 500错误怎么解决呀?
我看到一些资料说当应用程序调用Session的save()、update()、savaeOrUpdate()、get()或load(),以及调用查询接口的list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。
Session为应用程序提供了两个管理缓存的方法:
evict(Object obj):从缓存中清除参数指定的持久化对象。
clear():清空缓存中所有持久化对象。
这样说的话是不是我在查出bean后然后要进行evict(Object obj)或者
clear()呢?
用hibernate时要重点关注它的transaction,在transaction内应迅速完成任务,不做无意义的事情,一般不需要调用evict或者clear。既然你不想将对象属性的改变保存到数据库,为什么还要改变它呢,建议考虑用其它方法达到目的。