提交事务的确是吧 缓存的提交到数据库了 但是 如果数据被别的系统该过了又该如何到我的缓存呢?
我现在的问题就是当我的数据被别的系统改过了 我当前的系统 取得的数据还是旧的
我现在不得已 在每次 实例化dao的时候都调用 ××dao.initialize() 不知道这样对不对
也就是 _RootDAO.initialize()
我现在的问题就是当我的数据被别的系统改过了 我当前的系统 取得的数据还是旧的
我现在不得已 在每次 实例化dao的时候都调用 ××dao.initialize() 不知道这样对不对
也就是 _RootDAO.initialize()
只有一些运行期间 几乎不怎么变动 而且访问频繁的对象使用缓存
当配置文件中,lazy="false"
load方法会先找一级缓存(session),如果有你要找的id所对应的数据,返回这个对象,如果没有在一级缓存中找到,就到二级缓存找去找,如果找到返回对象,如果在这里都还没找到,这时才会进入数据库查找,找到返回对象,没有找到返回一个异常。
get方法同样先找一级缓存,如果有你要找的id所对应的数据,返回这个对象,如果没有在一级缓存中找到,直接访问数据库进行查询,找到返回对象,没有返回null当配置文件中,lazy="true"
load方法会先找一级缓存(session),如果有你要找的id所对应的数据,返回这个对象,如果没有在一级缓存中找到,返回代理的对象
get方法同样先找一级缓存,如果有你要找的id所对应的数据,返回这个对象,如果没有在一级缓存中找到,直接访问数据库进行查询,找到返回对象,没有返回null我是这么认为,说得不对的地方还请大家指点
还有就是 我该如何关闭缓存 我用的是 eclipse + hibernatesync 来开发的关于 lxd86
不论 lazy="true" or lazy="false" 如果一个在缓存中的数据 在别的系统中被修改了某字段的数据 那么取得的还是缓存中的数据 问题似乎还没有解决
关于 zk11231002
我还不是很清楚 这个version到底该如何用 如果两个系统一个使用了hibernate 一个使用了 jdbc or odbc 直连 这个version还有用吗?
如果开启了二级缓存,hibernate在执行任何一次查询的之后,都会把得到的结果集放到缓存中,缓存结构可以看作是一个hash table,key是数据库记录的id,value是id对应的pojo对象。当用户根据id查询对象的时候(load、iterator方法),会首先在缓存中查找,如果没有找到再发起数据库查询。但是如果使用hql发起查询(find, query方法)则不会利用二级缓存,而是直接从数据库获得数据,但是它会把得到的数据放到二级缓存备用。也就是说,基于hql的查询,对二级缓存是只写不读的。
我的系统叫A使用 hibernate 连接 mysql 5 的数据库 叫B
此时 A 调用方法初始化 _RootDAO.initialize()之后
其他系统 C 使用任何连接数据库的方式 修改了 B中某数据表bbb的某行数据
之后 当A 调用方法
bbbDAO bbbdao = new bbbDAO();
String querystring = "from bbb where bbbid = '"+ bbbid + "' ";
List<bbb> listbbb = bbbQuery.list();那么通过这样的方法
取回的list里面的数据还是C修改B前的那个值我在这些操作中哪里出了问题
return s.createQuery(queryStr);
}
这是 getQuery 的方法
我只要每次在查询之前 _RootDAO.initialize() 那么不会出现那样的问题 但是 似乎这样服务器搞不了多久后就歇菜了