1. Spring ThreadLocal和线程同步机制相比有什么区别
答:ThreadLocal是通过每个线程中创建个副本方式实现线程同步,而Java中默认同步机制是通过对象锁的方式,每次操作只能允许一个线程,而ThreadLocal则可以同步,在性能方面ThreadLocal通过一空间的方式换取时间,而java默认同步机制,则是以时间换取空间。注意:ThreadLocal不属于数据共享,而对象锁属于数据共享,当某个线程改变数据时,对ThreadLocal而言是不可见的,而使用对象锁的方式是可见的
2. Spring HibernateTemplate和Hibernate Session操作数据的区别
答:HibernateTemplate封装大部分的CRUB操作,使用方式和Session差不多,并且提供2种使用原生态Session对象操作数据方法(execute(HibernateCallback),executeFind(HibernateCallback))。
相比使用Session优势,主要体现在HibernateTemplate封装大部分的session操作,易于使用不必要显示关闭和获取session,简化Hibernate使用。
3.Hibernate中,持久状态、临时状态和游离状态的标志?
答:在Hibernate中,一个对象的OID为Null,则Session认为该对象为临时对象。对象有OID,在Session缓存中没有该对象,则Session默认该对象为游离状态。Sesion在检查该对象有OID,并且在缓存中也存在,则认为该对象处于持久状态。
4.Hibernate中的save()和persist()区别
答:两者都能将临时对象持久化,但save()会预先执行insert语句,并返回OID,而persist()不会预先执行也不会返回OID,它会在session clean()或flush()时才执行,这样可以提高负责处理长时间运行事务的程序的健壮性。