Hibernate框架中利用Configuration对象的buildSessionFactory()可以得到一个SessionFactory的对象,顾名思义SessionFactory就是产生Session对象的工厂,而它产生Session的方法有两种:
成都网站设计、网站建设服务团队是一支充满着热情的团队,执着、敏锐、追求更好,是创新互联的标准与要求,同时竭诚为客户提供服务是我们的理念。创新互联把每个网站当做一个产品来开发,精雕细琢,追求一名工匠心中的细致,我们更用心!1.openSession();
2.getCurrentSesion()
由于在很多面试题中有考察到这个知识点,所以我总结了一下这两种产生Session方法的区别。
区别1.openSession()方法无论在上下文中有没有Session存在都会建一个新的Session,而getCurrentSession()方法会检测在上下文环境中是否有Session存在,如果有,则拿到这个Session;如果没有则创建一个新的Session。
区别2.openSession()方法创建的Session在最后必须调用close()方法,而getCurrentSession()方法创建的Session在调用commit()方法后无需再调用close()方法(最好不要调用,会产生不必要的错误)。
区别3.getCurrentSession()方法的用途是界定事物边界。
Ps:在一次测试中发现当先调用openSession()方法产生Session后,再调用getCurrentSession()方法得到的并不是之前产生的那个Session,而是一个新的Session。
解释一下上面所提到的上下文,这里所说的上下文是在hibernate.cfg.xml中指定的,其中有两个常用的取值,分别是thread和jta。这两者的区别在于thread适用于单Connection,他的事物由数据库连接Connection管理;而jta适用于多Connection(跨数据库)的分布式程序(当然单Connection也可以),他的事物由application server提供的专门的事物管理器来管理。
创新互联www.cdcxhl.cn,专业提供香港、美国云服务器,动态BGP最优骨干路由自动选择,持续稳定高效的网络助力业务部署。公司持有工信部办法的idc、isp许可证, 机房独有T级流量清洗系统配攻击溯源,准确进行流量调度,确保服务器高可用性。佳节活动现已开启,新人活动云服务器买多久送多久。