日期:2014-05-20  浏览次数:20654 次

请问 hibernate 高手 关于 如何从数据库中重新取数据
我的系统配置了hibernate 取存取所有的数据 ,但是 当有一个别的系统 去修改了我的数据库时
我的hibernate 取到的数据怎么还是 旧的数据 似乎是缓存里面的数据 我怎么样强制从新去数据库取一次数据回来?

------解决方案--------------------
不是缓存的问题吧,用version试试看。
------解决方案--------------------
createQuery() 来取

你是设了2级缓存吧

对于一些对外部系统开放的数据库,不要使用缓存
只有一些运行期间 几乎不怎么变动 而且访问频繁的对象使用缓存
------解决方案--------------------
你说的这个应该是乐观死锁,这里又篇文章应该可以帮你http://www.djyeh.com/post/892.html
------解决方案--------------------
用的是load或者是get?
当配置文件中,lazy="false"
load方法会先找一级缓存(session),如果有你要找的id所对应的数据,返回这个对象,如果没有在一级缓存中找到,就到二级缓存找去找,如果找到返回对象,如果在这里都还没找到,这时才会进入数据库查找,找到返回对象,没有找到返回一个异常。
get方法同样先找一级缓存,如果有你要找的id所对应的数据,返回这个对象,如果没有在一级缓存中找到,直接访问数据库进行查询,找到返回对象,没有返回null

当配置文件中,lazy="true"
load方法会先找一级缓存(session),如果有你要找的id所对应的数据,返回这个对象,如果没有在一级缓存中找到,返回代理的对象
get方法同样先找一级缓存,如果有你要找的id所对应的数据,返回这个对象,如果没有在一级缓存中找到,直接访问数据库进行查询,找到返回对象,没有返回null

我是这么认为,说得不对的地方还请大家指点
------解决方案--------------------
hibernate的二级缓存
如果开启了二级缓存,hibernate在执行任何一次查询的之后,都会把得到的结果集放到缓存中,缓存结构可以看作是一个hash table,key是数据库记录的id,value是id对应的pojo对象。当用户根据id查询对象的时候(load、iterator方法),会首先在缓存中查找,如果没有找到再发起数据库查询。但是如果使用hql发起查询(find, query方法)则不会利用二级缓存,而是直接从数据库获得数据,但是它会把得到的数据放到二级缓存备用。也就是说,基于hql的查询,对二级缓存是只写不读的。

------解决方案--------------------
你把你的浏览器的 临时文件跟Cookies删了在重起服务器看看是不是还是同样结果,要是同样结果,一般都是你代码有问题!
------解决方案--------------------
有可能是你没有做增删改的操作,它只是从缓存中去取
------解决方案--------------------
为什么要2个应用同时对一个数据库进行操作?这样似乎不太好吧,锁的问题,赃数据的问题,还有并发什么的问题一大堆