Hibernate核心API

来源:互联网 发布:温度控制算法 编辑:程序博客网 时间:2024/05/20 01:45

1. SessionFactory

最开始的时候必须要先创建一个SessionFactory,这个就有点像一个数据库连接池一样,它是根据configuration文件来创建的,而它存在目的就是创建session。

2. Session

Session才是真正拿数据的通道,获取这个通道的方式有2个。

如果你调用openSession(),那么每次都会创建一个新的session,用完以后你必须调用session.close(),关掉session,下次调用的时候又会再创建一个。

而如果你使用getCurrentSession,那么如果没有就创建,已经有打开的,就直接使用那一个,不会创建新的。

注意一点,那就是无论哪种方式,一旦你commit了,那么下次调用都会创建新的。

为什么要区分呢?

需要说明一个关于" 事务"的问题。有时候你需要进行一连串的操作才叫一个事务的完成,比如你想存一个东西到一个表,再存一个log到日志表记录该操作,那么在这些操作全部完成之前,并不能提交。要不然你要是存了东西但是没有存日志就不行,或者你日志都存了,但其实根本没存数据,那么就要出错。所以最好的方式就是使用getCurrentSession,这样将2个操作都在这一个session上面,全部完成再提交,就能保证一致。

3. 那HIbernate是怎么去管理创建Session之类的呢?在hibernate.cfg.xml文件里面有一个current-session_context的配置,默认设置为thread,这样就会自动被管理,先去当前connection找,如果没有就创建,有就调用。还有一种是JTA。

4.JTA

假如你要做的操作依赖于多个数据库,而不是一个,就是所谓的分布式数据库,那么原来的只是针对一个数据的Connection就无法满足条件了。这个时候就需要有一个TransactionManager,由它来进行预处理,然后再将其弄成一个事务进行操作。

这个TransactionManager是由Application Server提供的支持,Tomcat不行,必须借助Spring,而JBoss和WebLogic可以。JTA就相当于有了TransactionManager之后的操作。

但是其实这种用法很少。

原创粉丝点击