Hibernate SessionFactory

Hibernate SessionFactory

 

Hibernate SessionFactory是我们通过它获取会话和执行数据库操作的工厂类。

目录[ 隐藏 ]

Hibernate SessionFactory

Hibernate的SessionFactory提供了三种方法,通过它我们可以得到Session对象- getCurrentSession()openSession()openStatelessSession()

Hibernate SessionFactory getCurrentSession

Hibernate SessionFactorygetCurrentSession()方法返回绑定到上下文的会话。但为了实现这一点,我们需要在hibernate配置文件中配置它,如下所示。


<property name="hibernate.current_session_context_class">thread</property>

如果它没有配置为线程,那么我们将得到以下异常。


Exception in thread "main" org.hibernate.HibernateException: No CurrentSessionContext configured!
	at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1012)
	at com.journaldev.hibernate.main.HibernateSessionExample.main(HibernateSessionExample.java:16)

由于此会话对象属于hibernate上下文,因此我们不需要关闭它。会话工厂关闭后,此会话对象将关闭。

Hibernate Session对象不是线程安全的,所以我们不应该在多线程环境中使用它。我们可以在单线程环境中使用它,因为它比打开新会话要快。

Hibernate SessionFactory openSession

Hibernate SessionFactoryopenSession()方法总是打开一个新会话。完成所有数据库操作后,我们应该关闭此会话对象。

我们应该在多线程环境中为每个请求打开一个新会话。对于Web应用程序框架,我们可以根据需要为每个请求或每个会话选择打开一个新会话。

Hibernate SessionFactory openStatelessSession

Hibernate SessionFactoryopenStatelessSession()方法返回实例StatelessSession。还有另一个重载方法,我们可以传递java.sql.Connection对象从hibernate获取无状态会话对象。

Hibernate中的StatelessSession不实现第一级缓存,也不与任何二级缓存交互。由于它是无状态的,因此它不实现事务性后写或自动脏检查或对关联实体进行级联操作。

无状态会话也会忽略集合。通过无状态会话执行的操作绕过Hibernate的事件模型和拦截器。它更像是普通的JDBC连接,并没有提供使用hibernate框架带来的任何好处。

但是,无状态会话在某些情况下非常适合。例如,我们将批量数据加载到数据库中,我们不希望hibernate会话在第一级缓存中保存大量数据。

下面给出了一个显示Hibernate SessionFactory方法用法的简单程序。


package com.journaldev.hibernate.main;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.StatelessSession;

import com.journaldev.hibernate.util.HibernateUtil;

public class HibernateSessionExample {

	public static void main(String[] args) {
		
		SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
		
		//Current Session - no need to close
		Session currentSession = sessionFactory.getCurrentSession();
		
		//open new session
		Session newSession = sessionFactory.openSession();
		//perform db operations
		
		//close session
		newSession.close();
		
		//open stateless session
		StatelessSession statelessSession = sessionFactory.openStatelessSession();
		//perform stateless db operations
		
		//close session
		statelessSession.close();
		
		//close session factory
		sessionFactory.close();
		
	}

}

这就是Hibernate中SessionFactory的全部内容,它是获取会话对象的不同方法。

 

转载来源:https://www.journaldev.com/3522/hibernate-sessionfactory

猜你喜欢

转载自blog.csdn.net/Aria_Miazzy/article/details/88380899
今日推荐