实体对象的状态
- 临时态:简单说,存在于内存中且与数据库无关,不在Session缓存中的对象,不具备OID。
- 持久态:简单说,与数据库相关且存在于Session缓存中的对象,具备OID。
- 游离态:简单说,不在Session缓存中,在数据库中可能还存在对应记录,具备OID。
VO和PO
- 概念:
1.处于临时态和游离态的实体对象称为VO(值对象-Value Object)
2.处于持久态的实体对象称为PO(持久对象-Persistent Object) - 区别:
1.VO是相对独立的对象,处于非管理状态
2.PO是存在于Session缓存中的对象,对应数据库中某条记录,PO数据变化时在事务提交时将反映到数据库中
3.PO如果与对应的Session分离,就会变成VO
- 概念:
Session
Session接口是Hibernate提供用于操作数据库的最主要的一个接口,提供了保存、更新、删除和加载对象的相关方法,Session具有一个缓存、记录于该缓存下的对象成为持久化对象,与数据库中的相关记录对应,Session能够在某些时间点,按照缓存中对象的变化来执行相关SQL语句,同步更新数据库,这一过程成为清理缓存。Session本身是线程不安全的,可以使用线程局部变量ThreadLocal解决,具体参照:http://blog.csdn.net/qq_32588349/article/details/51464936 内的HibernateSessionFactoryopenSession()和getCurrentSession()区别
- gerCurrentSession()是Hibernate3.0.1版本后增加的方法
- gerCurrentSession()创建的Session会绑定到当前线程,而openSession()不会
- gerCurrentSession()创建的Session会在事务提交/回滚后自动关闭,而openSession()需要调用Session的close()方法手动关闭
使用gerCurrentSession()方法需要在hibernate.cfg.xml文件中的
<session-factory>
节点中添加如下配置:1.使用本地事务(JDBC事务) <property name="current_session_context_class">thread</property> 2.使用全局事务(JTA事务) <property name="current_session_context_class">jta</property>
Hibernate一些概念
最新推荐文章于 2020-02-01 15:11:48 发布