Hibernate3.2(二)Hibernate Session关于session的参考hibernate 采用session作CRUD的操作,这个session不同
Hibernate3.2(二)Hibernate Session
关于session的参考
hibernate 采用session作CRUD的操作,这个session不同于web中的session。
在java中连接数据库是依赖java.sql.Connection,在Hibernate session就是Connection的一层高级封装,一个??? session对应了一个Connection,要实现延迟加载必须有session才行,session中还包含了缓存的概念。
Session是由SessionFactory所创建,SessionFactory是线程安全的(Thread-Safe),您可以让多个线程同时存取SessionFactory而不会有数据共享的问题。
然而Session则不是线程安全的,所以试图让多个线程共享一个 Session,将会发生数据共享而发生混乱的问题。所以不要在一个类中声明一个成员变量多个方法都用它。正确的做法是,一个业务请求过来,打开session、打开事务,操作完后关闭事务马上关闭session,让事务和session的生命周期同步。
?
<cache usage="read-write"/>
<id name="id" column="TYPEID" type="java.lang.Long">
<generator column="NAME" type="java.lang.String"/>
<property name="dbType" column="DBTYPE" type="java.lang.String"/>
</class>
</hibernate-mapping>
关键就是这个<cache usage="read-write"/>,其有几个选择
read-only,read-write,transactional,等
然后在执行查询时 注意了 ,如果是条件查询,或者返回所有结果的查询,此时session.find()方法 不会获取缓存中的数据。只有调用query.iterate()方法时才会调缓存的数据。
同时 get 和 load方法 是都会查询缓存中的数据 .
对于不同的缓存框架具体的配置方法会有不同,但是大体是以上的配置
(另外,对于支持事务型,以及支持集群的环境的配置我会争取在后续的文章中中 发表出来)
3.总结
总之是根据不同的业务情况和项目情况对hibernate进行有效的配置和正确的使用,扬长避短。不存在适合于任何情况的一个“万能”的方案。
http://www.360doc.com/content/11/0320/17/4734922_102927597.shtml?
?