文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Hibernate小节

Hibernate小节

时间:2010-10-09  来源:Glare

 

getCurrentSession和openSession方法

HibernateSessionFactory有两个得到Session接口对象的方法, 分别是openSession()和getCurrentSession(). 区别在于:
1.getCurrentSession方法时会首先在hibernate session context中寻找有无可用的session, 如果没有才创建一个新的. 而openSession方法时始终创建一个新的Session.

2.getCurrentSession返回的session,当Transaction在commit时会自动关闭,而openSession返回的 session必须显示调用session.close()进行关闭。

总结: 未测试getCurrentSession是否如MyEclipse中自动生成的SessionFactory一样绑定当前线程, 但从配置文件上来看的确如此, 有待确认.

 

load和get方法

1.load方法返回的是代理对象, 等到真正用到该对象的时候才发出sql语句, get方法直接从数据库查找并返回具体对象, 不会延迟.
2.不存在对应记录时表现不一样:使用load方法时, 若未找到该对象, 将抛出ObjectNotFoundException, 而get方法返回null.

相同点:
无论是load还是get方法, 都会首先在查找一级缓存(load会先查找二级缓存(if exist)). 如果没有, 才会去数据库中查找.
e.g.
[...]
session.beginTransaction();
Teacher t1 = (Teacher)session.load(Teacher.Class, 1);
System.out.println(t1.getName());                             // send query statement and get the result then print.
Teacher t2 = (Teacher)session.load(Teacher.Class, 1);
System.out.println(t2.getName());                             // now here, the Object is exist, just print it.
session.getTransaction().commit();

总结: 当一个对象从数据库中通过load和get方法查询出来以后, 该数据变为persistent状态. 如果在事务提交或回滚前在查询一遍相同的对象时, hibernate只发一条SQL语句.

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载