Hibernate工作原理:
对数据库的写操作包括保存、更新和删除,当保存一个POJO持久对象时,触发Hibernate的保存事件监听器进行处理。Hibernate通过映射文件获得对象对应数据库表名以及属性所对应的表中的列名,然后通过反射机制持久化对象(实体对象)的各个属性,最终组织成向数据库插入新对象的SQL insert语句。调用了session.save()方法后,这个对象会标识成持久化状态存放在session中,对于Hibernate来说它就是一个持久化了的对象,但这个时候Hibernate还不会真正的执行insert语句,当进行session的刷新同部或事务提交时,Hibernate会把session缓存中的所有SQL语句一起执行,对于更新、删除操作也是采用类似的机制。 然后,提交事务并事务提交成功后,这些写操作就会被永久地保存进数据库中,所以,使用session对数据库操作还依赖于Hibernate事务的处理。如果设置了二级缓存,那么这些操作会被同步到二级缓存中,Hibernate对数据库最终操作也是依赖于底层JDBC对数据库进行。
Hibernate里只说过对象有三种状态:临时状态、持久化状态和托管状态。
但是并没有说对象处于持久化状态的时候,一定把数据持久化到数据库了。
所谓的持久化状态,是指在一级缓存中已经生成了对象的代理,并且已经存在了数据库的唯一标识。此时它只是在数据库占有一席之位,并没有真正地占进去。只有当显示地执行对象的flush、session的close的时候,才会把缓存数据同步到数据库。