hibernate中,当一个对象持久化将数据库读取后,并将数据保存进缓存中,当第二次读取数据时,它就直接去缓存中取数据了,这点没错吧
但如果机群的话
a机写得缓存在a机的内存
b机写得缓存在b机的内存
两个都更新各自的内存不会出现脏数据吗?
但如果机群的话
a机写得缓存在a机的内存
b机写得缓存在b机的内存
两个都更新各自的内存不会出现脏数据吗?
解决方案 »
- “对象的引用”是什么意思?
- Java中使用预备语句查询access数据库无结果返回。
- 奇怪问题.....我想测试一下map能
- filedialog 怎样设置*.xlc,*.txt 这东西啊?
- 急问“JZ006: 捕获到 IO 例外:JZ0EM: 数据结束”!在线等!!
- CSDN的新论坛太破了
- 买了一本英文版的SCJP教材,好难啃啊,我是第一次读英文原版,那位提供一点阅读心得,鼓励我一下也可以,谢谢了。
- Jbuilder5.0的怪问题
- 关于cloudscape数据库的问题
- 请教Java SWING高人一个界面的实现问题如何解决?
- Java侦听系统终止事件,做好扫尾工作
- 请假一下runtime.exec调用exp命令导出oracle数据库的问题
楼主【nil2000】截止到2008-07-26 13:48:36的历史汇总数据(不包括此帖):
发帖的总数量:67 发帖的总分数:13736 每贴平均分数:205
回帖的总数量:68 得分贴总数量:4 回帖的得分率:5%
结贴的总数量:66 结贴的总分数:13617
无满意结贴数:0 无满意结贴分:0
未结的帖子数:1 未结的总分数:119
结贴的百分比:98.51 % 结分的百分比:99.13 %
无满意结贴率:0.00 % 无满意结分率:0.00 %
值得尊敬
!可是如果是集群环境的话!a机更新了数据库!那a机只是更新a机的缓存吧?可是集群中的b机缓存还是以前的阿?
这跟cache也没任何关系啊
如果hibernate
把数据从数据库读取后对,对象持久化,并将数据保存进缓存中,当第二次读取数据时,它就直接去缓存中取数据了,这点没错的话!这跟悲观锁\乐观锁也没关系啊!
hibernate 大家都不用他的集群吗?
比如你A虚拟机中有个User对象(并且是持久化状态);B虚拟机中也有个相同的User对象(就是数据库中ID同A虚拟机相同的User对象)
1. A.User改变了然后B.User也改变了.自然最后在数据库中的是B.user的最后改变.
2. A.User删除了,B.User也执行删除操作.B.user只不过删除不到什么东西.也不会有什么问题.
3. 如果你在A虚拟中增加了一个User对象,而在B虚拟机中也增加了一个User对象.就是加2个User呗也不会有什么脏数据啊.但是唯一要注意的是同步问题.比如有个保存树形结构的表每删除一条数据就要从新生成一遍treeCode.这时在执行玩delete后就要从新构建这棵新的树,
这时就需要用到对象锁锁定,等从新构建完后再允许有其他的删除或是更新的操作.如下代码:
private static final Object TREEBUILD_FLAG = new Object();
public void rebuildWebDirTree(int id) {
synchronized (TREEBUILD_FLAG) {
_rebuildWebDirTree(id);
}
}
private void _rebuildWebDirTree(int id){
if(this.getWebDirChildrenCount(id)>0){
int ordering = 1;
for(WebDir dir : this.getWebDirList(id)){
dir.setOrdering(ordering*10);
String treeCode = ("000"+ordering).substring((""+ordering).length());
if(dir.getPid()==0){
dir.setTreeCode(treeCode);
}else{
WebDir dirP = this.getWebDir(dir.getPid());
dir.setTreeCode(dirP.getTreeCode()+treeCode);
}
this.updateWebDir(dir);
ordering ++;
this.rebuildWebDirTree(dir.getId());
}
}
}我举上面的例子就是想告诉你, 同步的问题是数据库层面的问题.与什么集群不集群的没啥关系.Hibernate不会造成脏数据,关键是认为的逻辑错误使然.
http://www.ourjavasky.cn我的论坛
http://www.ourjavasky.cn/bbs
hibernate中,当一个对象持久化将数据库读取后,并将数据保存进缓存中,当第二次读取数据时,它就直接去缓存中取数据了,这点没错吧 用户A访问A机,创建了一个session.检索tableA并对检索结果,持久化.
用户B访问B机,创建了一个session.并对tableA做更新操作.
用户A再次访问持久话的tableA.如果他从缓存中读取tableA的话.不是无法看到.用户B对tableA做的操作了吗?
删除了的数据!这不算脏数据吗?
hibernate中,当一个对象持久化将数据库读取后,并将数据保存进缓存中,当第二次读取数据时,它就直接去缓存中取数据了,这点没错吧 用户A访问A机,创建了一个session.检索tableA并对检索结果,持久化.
用户B访问B机,创建了一个session.并对tableA做更新操作.
用户A再次访问持久话的tableA.如果他从缓存中读取tableA的话.不是无法看到.用户B对tableA做的操作了吗?
hibernate中,当一个对象持久化将数据库读取后,并将数据保存进缓存中,当第二次读取数据时,它就直接去缓存中取数据了,这点没错吧 用户A访问A机,创建了一个session.检索tableA并对检索结果,持久化.
用户B访问B机,创建了一个session.并对tableA做更新操作.
用户A再次访问持久话的tableA.如果他从缓存中读取tableA的话.不是无法看到.用户B对tableA做的操作了吗?
试试如下途径进行集群 : 1. 不使用hibernate cache
2. 好像有jdbc驱动的封装, 用于实现集群, 好像叫做c-jdbc, 配置hibernate使用这个jdbc