hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.list().iterator(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
//q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
// q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.list().iterator(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
//q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
// q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[color=red]按 jones 的意思是不是 read-only 形式下,不能对二级缓存中的对象做任何修改,但可以修改该对象在数据库中的状态 是吗?那么我还有个,在前面的基础上,即在第一次查询 和第二次查询的之间放入一段修改缓存中某对象的时咋出现题呢,代码如下[/color]
[code="java"]s = HibernateUtils.getSession() ;
//s.setCacheMode(CacheMode.GET) ;
User u = new User() ;
u.setId("8aa3b33c1d8eb43b011d8eb441300001") ;
u.setName("yushan5118") ;
s.saveOrUpdate(u) ;
s.beginTransaction().commit() ;
s.close() ;[/code]
[color=red]出现一个异常:
ERROR ReadOnlyCache:42 - Application attempted to edit read only item: com.c35.hibernate.po.User#8aa3b33c1d8eb43b011d8eb441300001
且数据库中的该对象属性未变化? 按理不是说不能修改缓存里面的,但可以操纵数据库吗?谢谢[/color]
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.list().iterator(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
//q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
// q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.list().iterator(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
//q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
// q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[color=red]按 jones 的意思是不是 read-only 形式下,不能对二级缓存中的对象做任何修改,但可以修改该对象在数据库中的状态 是吗?那么我还有个,在前面的基础上,即在第一次查询 和第二次查询的之间放入一段修改缓存中某对象的时咋出现题呢,代码如下[/color]
[code="java"]s = HibernateUtils.getSession() ;
//s.setCacheMode(CacheMode.GET) ;
User u = new User() ;
u.setId("8aa3b33c1d8eb43b011d8eb441300001") ;
u.setName("yushan5118") ;
s.saveOrUpdate(u) ;
s.beginTransaction().commit() ;
s.close() ;[/code]
[color=red]出现一个异常:
ERROR ReadOnlyCache:42 - Application attempted to edit read only item: com.c35.hibernate.po.User#8aa3b33c1d8eb43b011d8eb441300001
且数据库中的该对象属性未变化? 按理不是说不能修改缓存里面的,但可以操纵数据库吗?谢谢[/color]
read-only只是Hibernate用来决定如何处理缓存数据的,如果你的缓存对象是read-only的,Hibernate可不负责你的缓存与数据库之间的同步处理,因为Hibernate认为你这个对象根本就永远都不会改变。
[color=red]那么 Hibernate 只对缓存里面的对象read-only,当我修改某个对象的时候,hibernate难道还会判断我修改的对象是否是缓存中已经有的,如果有就不接受修改 是吗?要是这样,想修改该对象在数据库中的内容 该咋办,又不影响read-only?能否帮忙解释一下为何会出现ERROR ReadOnlyCache:42错误?[/color] 在此感谢jones
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.list().iterator(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
//q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
// q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.list().iterator(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
//q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
// q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[color=red]按 jones 的意思是不是 read-only 形式下,不能对二级缓存中的对象做任何修改,但可以修改该对象在数据库中的状态 是吗?那么我还有个,在前面的基础上,即在第一次查询 和第二次查询的之间放入一段修改缓存中某对象的时咋出现题呢,代码如下[/color]
[code="java"]s = HibernateUtils.getSession() ;
//s.setCacheMode(CacheMode.GET) ;
User u = new User() ;
u.setId("8aa3b33c1d8eb43b011d8eb441300001") ;
u.setName("yushan5118") ;
s.saveOrUpdate(u) ;
s.beginTransaction().commit() ;
s.close() ;[/code]
[color=red]出现一个异常:
ERROR ReadOnlyCache:42 - Application attempted to edit read only item: com.c35.hibernate.po.User#8aa3b33c1d8eb43b011d8eb441300001
且数据库中的该对象属性未变化? 按理不是说不能修改缓存里面的,但可以操纵数据库吗?谢谢[/color]
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.list().iterator(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
//q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
// q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.list().iterator(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
//q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
// q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[color=red]按 jones 的意思是不是 read-only 形式下,不能对二级缓存中的对象做任何修改,但可以修改该对象在数据库中的状态 是吗?那么我还有个,在前面的基础上,即在第一次查询 和第二次查询的之间放入一段修改缓存中某对象的时咋出现题呢,代码如下[/color]
[code="java"]s = HibernateUtils.getSession() ;
//s.setCacheMode(CacheMode.GET) ;
User u = new User() ;
u.setId("8aa3b33c1d8eb43b011d8eb441300001") ;
u.setName("yushan5118") ;
s.saveOrUpdate(u) ;
s.beginTransaction().commit() ;
s.close() ;[/code]
[color=red]出现一个异常:
ERROR ReadOnlyCache:42 - Application attempted to edit read only item: com.c35.hibernate.po.User#8aa3b33c1d8eb43b011d8eb441300001
且数据库中的该对象属性未变化? 按理不是说不能修改缓存里面的,但可以操纵数据库吗?谢谢[/color]
read-only只是Hibernate用来决定如何处理缓存数据的,如果你的缓存对象是read-only的,Hibernate可不负责你的缓存与数据库之间的同步处理,因为Hibernate认为你这个对象根本就永远都不会改变。
[color=red]那么 Hibernate 只对缓存里面的对象read-only,当我修改某个对象的时候,hibernate难道还会判断我修改的对象是否是缓存中已经有的,如果有就不接受修改 是吗?要是这样,想修改该对象在数据库中的内容 该咋办,又不影响read-only?能否帮忙解释一下为何会出现ERROR ReadOnlyCache:42错误?[/color] 在此感谢jones
[color=red]还有就是 当我开启 s.setCacheMode(CacheMode.GET) ,应该是不该把这个修改的对象放到二级缓存中,由此我认为应该不会与二级缓存的read-only产生冲突啊,请jones 帮忙解释一下,小弟不胜感激啊[/color]
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.list().iterator(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
//q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
// q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.list().iterator(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("from User") ;
//q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
s.beginTransaction() ;
User user = new User() ;
user.setUserName("yu") ;
user.setPwd("123") ;
Serializable id = s.save(user) ;
s.beginTransaction().commit() ;
s.close() ;
System.out.println("----------------------------") ;
s = HibernateUtils.getSession() ;
q = s.createQuery("from User") ;
// q.setCacheable(true) ;
for(Iterator iter=q.iterate(); iter.hasNext();){
User u = (User)iter.next() ;
System.out.println("user.getName ="+u.getUserName()) ;
}
s.close() ;
}
[/code]
输出结果:
Hibernate: select user0_.id as id0_, user0_.userName as userName0_, user0_.pwd as pwd0_, user0_.createTime as createTime0_ from User user0_
user.getName =yushan
Hibernate: insert into User (userName, pwd, createTime, id) values (?, ?, ?, ?)
Hibernate: select user0_.id as col_0_0_ from User user0_
user.getName =yushan
user.getName =yu
以上代码前提是已经开启查询缓存和二级缓存,User设置为read-only,第一次取出一条,然后增加条,为何第二次取的时候会有两条呢,而且还是从缓存中取得的?按理来说经过第一次取后二级缓存中只有一条记录,当save的时候也会往二级缓存中增加一条记录,但是第二次取的时候,因为二级缓存生存周期还未失效,且还是read-only,那么二级中应该只有一条啊?为何呢,请详解谢谢!
[color=red]按 jones 的意思是不是 read-only 形式下,不能对二级缓存中的对象做任何修改,但可以修改该对象在数据库中的状态 是吗?那么我还有个,在前面的基础上,即在第一次查询 和第二次查询的之间放入一段修改缓存中某对象的时咋出现题呢,代码如下[/color]
[code="java"]s = HibernateUtils.getSession() ;
//s.setCacheMode(CacheMode.GET) ;
User u = new User() ;
u.setId("8aa3b33c1d8eb43b011d8eb441300001") ;
u.setName("yushan5118") ;
s.saveOrUpdate(u) ;
s.beginTransaction().commit() ;
s.close() ;[/code]
[color=red]出现一个异常:
ERROR ReadOnlyCache:42 - Application attempted to edit read only item: com.c35.hibernate.po.User#8aa3b33c1d8eb43b011d8eb441300001
且数据库中的该对象属性未变化? 按理不是说不能修改缓存里面的,但可以操纵数据库吗?谢谢[/color]
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
[b]问题补充:[/b]
hibernate 二级缓存 中将映射文件设置为 read-only,为何还能进行增删改?
例如某User对象;
为何还可以进行User进行增删改呢?不是只读吗?谢谢
测试代码如下:
[code="java"]
public void testCache1(){
Session s = HibernateUtils.getSession() ;
Query q = s.createQuery("fro