初学Hibernate缓存,照着书上写的代码运行结果与书上不符合

package mypack;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import sessionfactory.HibernateSessionFactory;

public class test2 {

 /**
  * @param args
  */


 public static void main(String[] args) {


  //储存插入记录的id
  int insertid;


  //新建实例
  TUser insertuser = new TUser();
  insertuser.setName("name1");
  insertuser.setResume("resume1");


  //插入实例
  Session session = HibernateSessionFactory.getSession();
  Transaction tx = session.beginTransaction();  
  session.save(insertuser);
  insertid = insertuser.getId();
  tx.commit();
  session.close();
  
  // 装载插入的实例
  session = HibernateSessionFactory.getSession();
  TUser user = (TUser) session.load(TUser.class, new Integer(insertid));
  System.out.println("装载实例成功,id==>" + user.getId());
  tx = session.beginTransaction();


  // 删除插入的实例
  String hql = "delete TUser where id = "+insertid;
  Query query = session.createQuery(hql);
  query.executeUpdate();
  tx.commit();


  // 读取删除的实例,抛出异常
  user = (TUser) session.load(TUser.class, new Integer(insertid));
  System.out.println("读取缓存中存放的id成功, id==>" + user.getId());
  // 捕捉异常
  try {
   System.out.println(user.getName());
  } catch (org.hibernate.ObjectNotFoundException e) {
   System.out.println("代码user.getname()发生异常,因为该实例已经被删除");
   System.out.println(e.toString());
   System.out.println("结论:Query.execxuteUpdate()方法删除数据是缓存同步的");
  }
  session.close();
 }
}



打印信息如下:

Hibernate: insert into tuser (name, resume) values (?, ?)
装载实例成功,id==>43
Hibernate: delete from tuser where id=43
读取缓存中存放的id成功, id==>43
Hibernate: select tuser0_.id as id0_, tuser0_.name as name0_0_, tuser0_.resume as resume0_0_ from tuser tuser0_ where tuser0_.id=?
代码user.getname()发生异常,因为该实例已经被删除
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [mypack.TUser#43]
结论:Query.execxuteUpdate()方法删除数据是缓存同步的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值