1、hibernate中get和load方法有什么不同?
2、增删查改?
3、数据库的隔离级别?
I. 对于同时运行多个事务,当这些事务访问数据库中的相同数据时,如果没有采取必要的隔离机制,就会导致各种并发问题。 (1)脏读: 对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的. (2)不可重复读: 对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了. (3)幻读: 对于两个事物 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行. II.数据库事务的隔离性:数据库必须的隔离并发运行多个事务的能力,使它们不会相互影响,避免各种并发问题。 III.隔离级别:一个事务与其它事务的隔离程度称为隔离级别,数据库规定了多种隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数扰一致性就越好,但并发性也就越弱。 (1)读未提交数据,允许事务读取未被其它事务提交的变更,上面三个问题都会出现。 (2)读已提交数据,允许事务读取被其它事务提交的变理,避免脏读,但会出现不可重复读和幻读。 (3)可重复读,确保一个事务可以从一个字段读取相同的值,在此事务持续期间,禁止其它事务操作该字段,幻读问题仍存在 (4)串行化,效率低 IV.mysql默认的隔离级别是可重复读,设置数据库隔离级别有两种方式 (1)使用Sql语句修改数据库的隔离级别。 (2)在 Hibernate 中设置隔离级别 READ UNCOMMITED READ COMMITED REPEATABLE READ SERIALIZEABLE View Code
4、hibernate中对象的四种状态?
(1)临时状态 新new出一个对象OID 通常为 null,不存在于Session缓存中,也不存在于数据库中 (2)持久化状态 临时状态对象通过Session的save()方法和saveOrUpdate()方法可以把一个临时对象和数据库相关联,并把临时对象携带的信息通过配置文件所做的映射插入数据库中,这个临时对象就成为持久化对象。 持久化对象在数据库中有相应的记录,持久化对象可以是刚被保存的,或者刚被加载的,但都是在相关联的session声明周期中保存这个状态。 (3)脱管状态 Session关闭之后,与此Session关联的持久化对象就变成为脱管对象, OID 不为 null 不再处于 Session 缓存中 般情况需下, 游离对象是由持久化对象转变过来的, 因此在数据库中可能还存在与它对应的记录 View Code
5、hibernate一级缓存和二级缓存的比较?
6、hibernate的延迟加载机制