Hibernate了解吗?
- 项目中还是多使用mybatis,因为Hibernate配置相对复杂、对于复杂的sql优化困难。
- Hibernate的主要实现是通过SessionFactory创建Session,然后通过Session操作缓存,最后完成数据库表与对象的状态数据同步。
- Hibernate的缓存技术分为一级缓存(Session缓存,Session关闭后就消失),二级缓存(一般通过ehcache实现的sessionFactory应用级别只读缓存)
- Hibernate数据对象存在三种状态:临时(刚new未交给Session处理)、持久化(交给Session处理)、游离(Session清空或关闭)
- Session.flush()清理缓存是指按照缓存中对象的状态的变化来同步更新数据库,但不清空缓存;Session.clear()清空是把Session 的缓存置空, 但不同步更新数据库。
- load()支持延迟加载,get()不支持延迟加载,如果数据库中,没有 OID 指定的对象。通过 get方法加载,则返回的是一个null;通过load加载,则返回一个代理对象,如果后面代码如果调用对象的某个属性会抛出异常:org.hibernate.ObjectNotFoundException。
- openSession()是直接 new 一个新的 Session 并返回,并且需要手动关闭;getCurrentSession()通过ThreadLocal使Session在线程间隔离且在同一线程内共享,基于Spring管理时通过此机制实现事务及会话管理,无需手动创建、关闭Session。
网友评论