Hibernate一些概念

  • 实体对象的状态

    1. 临时态:简单说,存在于内存中且与数据库无关,不在Session缓存中的对象,不具备OID。
    2. 持久态:简单说,与数据库相关且存在于Session缓存中的对象,具备OID。
    3. 游离态:简单说,不在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 内的HibernateSessionFactory

  • openSession()和getCurrentSession()区别

    1. gerCurrentSession()是Hibernate3.0.1版本后增加的方法
    2. gerCurrentSession()创建的Session会绑定到当前线程,而openSession()不会
    3. 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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值