放到缓存中,update,save,load后都放到缓存中.
select 得到数据就是存放在缓存中的数据,update后缓存中存放的对象的属性也变了,好像是当session关闭的时候就flush了,
一但session关闭,缓存也被清空,所以得同步数据库
提交 已修改没有提交到数据库中的数据不知道对不对,一点占印像,还请高手指点
select 得到数据就是存放在缓存中的数据,update后缓存中存放的对象的属性也变了,好像是当session关闭的时候就flush了,
一但session关闭,缓存也被清空,所以得同步数据库
提交 已修改没有提交到数据库中的数据不知道对不对,一点占印像,还请高手指点
解决方案 »
- dwr如何实现文件下载
- /C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%206.0/webapps
- 关于RSA算法的,项目很急,会的老大解决下
- 帮帮忙各位大大!是关于文件格式转换
- java编程(关于字符串分割问题)
- struts1中ActionForm的validate()方法的疑问
- mysql问题,紧急,请高手指点!!!
- javaee如何能保护某个磁盘不被访问?
- 乱码小问题
- EJB mapping error on MSSQL TEXT datatype columns (J2EE)
- Hibernate Annotation 的问题!!
- ireport制作多个子报表,子报表重叠
2,正确。除非显示声明只读事务。否则进行下次查询时要把当前session缓存的对象进行数据库同步
3。可能是防止并发修改吧
4,同步当前session缓存的所有对象
1.hibernate的事务提交后,是将数据直接持久化到数据库还是只是放在缓存里?
事务提交后就持久化到数据库了,这跟ORACLE的回滚段一样的;在一个事务中调用一个select语句,如果之前的已经有某个update语句做了数据修改,或是直接改变了对象的属性,则hibernate会在查询语句执行之前首先调用flush()将缓存中的数据同步到数据库,接着才返回查询数据。
2.以上表述是否正确?
对
学学!!!
在事务中调用一个select语句,之前已经对某个update语句作了修改,如果这个update commit了的话,那么数据库中的记录是修改过的数据。但是select查询的是缓存里的数据。如果update后没有commit 或者是连接没有关闭的话,你这时在select会查询出不同的结果,这是不对的,(这个问题困扰我很长时间)。所以在update后一定要关闭连接。
“在一个事务中调用一个select语句,如果之前的已经有某个update语句做了数据修改,或是直接改变了对象的属性,则hibernate会在查询语句执行之前首先调用flush()将缓存中的数据同步到数据库,接着才返回查询数据。”
----这是“langke93(冬会初雪)”的观点
意思是一个事务内部select时会清理缓存,然后再查询(是不是直接查询缓存?)“如果update后没有commit 或者是连接没有关闭的话,你这时在select会查询出不同的结果”
----lubin83() 的观点select出不同的结果是指什么??是数据库里的数据还是缓存里的数据?
Transaction tran = session.beginTransaction();
Customer c=(Customer) session.get(Customer.class, new Long(1));
c.setAge(55);
session.update(c);
Session session2 = sf.openSession();
Transaction tran2 = session2.beginTransaction();
//会打印一条sql语句,说明是从数据库中取的
Customer c2=(Customer) session2.get(Customer.class, new Long(1));
System.out.println(c2.getAge());//查询的是原来没有更新的数据
tran2.commit();
System.out.println(c2.getAge());//查询的是原来没有更新的数据
session2.close();