求解决 SessionFactory 为什么创建失败?

CoderPrince 2015-08-29 03:09:08
我用的是Hibernate4.2.4,创建SessionFactory失败了。。Hibernate必须的8个jar包都加进来了,没问题的。求各位帮忙看看。 新手,挺急的!……


public class HibernateUtil {

private static SessionFactory sessionFactory;
private static ThreadLocal<Session> threadLocal;

static{

try {
//创建工厂
Configuration cfg = new Configuration().configure();
ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry();
sessionFactory = cfg.buildSessionFactory(serviceRegistry);

} catch (HibernateException e) {
System.err.println(e.getMessage());
}

threadLocal = new ThreadLocal<Session>();
}

private HibernateUtil(){

}

// 获取Session
public static Session getSession()throws HibernateException{
Session session = threadLocal.get();
if(session==null){

if(sessionFactory==null){
System.out.println("sessionFactory为空!!!");
}

// 问题出在这里,openSession的时候报空指针,所以我在上面判断sessionFactory,
// 结果确实输出了 sessionFactory为空!!! 求解决sessionFactory 为什么创建失败?

session = sessionFactory.openSession();
threadLocal.set(session);

}
return session;
}

// 关闭Session
public static void closeSession()throws HibernateException{
Session session = threadLocal.get();
if(session!=null){
session.close();
}
threadLocal.set(null);
}

}


调用测试代码:


public class Test {

Session session;
Transaction transaction;

@org.junit.Test
public void test(){
News news = new News("今晚武汉有雨","本报讯:预计今晚武汉地区局部有中到大雨,请注意防范",new Date());
System.out.println(news);
session = HibernateUtil.getSession();
transaction = session.beginTransaction();
session.save(news);
transaction.commit();
HibernateUtil.closeSession();
}
}
...全文
400 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
CoderPrince 2015-08-29
  • 打赏
  • 举报
回复
引用 6 楼 gam2046 的回复:
[quote=引用 4 楼 u012150261 的回复:]
[quote=引用 3 楼 gam2046 的回复:]
尝试这样创建SessionFactory

public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry registry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
/* 下面这段代码可能适用于4.0版本(未经测试)
* 下面的代码可以在4.1之后版本运行,但不被推荐使用
ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(
configuration.getProperties()).buildServiceRegistry ();
*/
// 创建SessionFactory实例
sessionFactory = configuration.buildSessionFactory(registry);
}
public static Session currentSession() {
return sessionFactory.openSession();
}
public static void closeSession(Session session) {
if (session != null) {
session.close();
}
}
}


我开始是用 StandardServiceRegistryBuilder() 这个创建的,但是Eclipse提示说StandardServiceRegistryBuilder 这个类找不到,我不知道是不是缺少了什么jar包? 这个类无法导入。。。 所以我就用了ServiceRegistryBuilder,怎么办?[/quote]

既然是类找不到,那就说明缺少某些文件没有引用。不过我是通过Maven来管理依赖性的,因此,具体需要哪些文件并不清楚。不过我刚才尝试新建一个工程,并通过Maven引入Hibernate,其一共导入11个文件。如下图所示:


我这里版本是hibernate 4.3.10 final,如果你不通过这些依赖管理工具,需要自行将这些文件引用到项目中。[/quote]


解决了,4.2.4的核心包里面没有StandardServiceRegistryBuilder这个类,我也换了4.3.10就好了。

非常感谢!^_^ 结贴了~

forDream_ 2015-08-29
  • 打赏
  • 举报
回复
引用 4 楼 u012150261 的回复:
[quote=引用 3 楼 gam2046 的回复:]
尝试这样创建SessionFactory

public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry registry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
/* 下面这段代码可能适用于4.0版本(未经测试)
* 下面的代码可以在4.1之后版本运行,但不被推荐使用
ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(
configuration.getProperties()).buildServiceRegistry ();
*/
// 创建SessionFactory实例
sessionFactory = configuration.buildSessionFactory(registry);
}
public static Session currentSession() {
return sessionFactory.openSession();
}
public static void closeSession(Session session) {
if (session != null) {
session.close();
}
}
}


我开始是用 StandardServiceRegistryBuilder() 这个创建的,但是Eclipse提示说StandardServiceRegistryBuilder 这个类找不到,我不知道是不是缺少了什么jar包? 这个类无法导入。。。 所以我就用了ServiceRegistryBuilder,怎么办?[/quote]

既然是类找不到,那就说明缺少某些文件没有引用。不过我是通过Maven来管理依赖性的,因此,具体需要哪些文件并不清楚。不过我刚才尝试新建一个工程,并通过Maven引入Hibernate,其一共导入11个文件。如下图所示:


我这里版本是hibernate 4.3.10 final,如果你不通过这些依赖管理工具,需要自行将这些文件引用到项目中。
CoderPrince 2015-08-29
  • 打赏
  • 举报
回复
引用 3 楼 gam2046 的回复:
尝试这样创建SessionFactory

public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
Configuration configuration = new Configuration();
configuration.configure();
ServiceRegistry registry = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties()).build();
/* 下面这段代码可能适用于4.0版本(未经测试)
* 下面的代码可以在4.1之后版本运行,但不被推荐使用
ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(
configuration.getProperties()).buildServiceRegistry ();
*/
// 创建SessionFactory实例
sessionFactory = configuration.buildSessionFactory(registry);
}
public static Session currentSession() {
return sessionFactory.openSession();
}
public static void closeSession(Session session) {
if (session != null) {
session.close();
}
}
}


CoderPrince 2015-08-29
  • 打赏
  • 举报
回复
引用 3 楼 gam2046 的回复:
尝试这样创建SessionFactory

public class HibernateUtil {
	private static SessionFactory sessionFactory;
	static {
		Configuration configuration = new Configuration();
		configuration.configure();
		ServiceRegistry registry = new StandardServiceRegistryBuilder()
				.applySettings(configuration.getProperties()).build();
		 /* 下面这段代码可能适用于4.0版本(未经测试)
		  * 下面的代码可以在4.1之后版本运行,但不被推荐使用
		ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(
				configuration.getProperties()).buildServiceRegistry ();
		 */
		// 创建SessionFactory实例
		sessionFactory = configuration.buildSessionFactory(registry);
	}
	public static Session currentSession() {
		return sessionFactory.openSession();
	}
	public static void closeSession(Session session) {
		if (session != null) {
			session.close();
		}
	}
}
我开始是用 StandardServiceRegistryBuilder() 这个创建的,但是Eclipse提示说StandardServiceRegistryBuilder 这个类找不到,我不知道是不是缺少了什么jar包? 这个类无法导入。。。 所以我就用了ServiceRegistryBuilder,怎么办?
forDream_ 2015-08-29
  • 打赏
  • 举报
回复
尝试这样创建SessionFactory

public class HibernateUtil {
	private static SessionFactory sessionFactory;
	static {
		Configuration configuration = new Configuration();
		configuration.configure();
		ServiceRegistry registry = new StandardServiceRegistryBuilder()
				.applySettings(configuration.getProperties()).build();
		 /* 下面这段代码可能适用于4.0版本(未经测试)
		  * 下面的代码可以在4.1之后版本运行,但不被推荐使用
		ServiceRegistry registry = new ServiceRegistryBuilder().applySettings(
				configuration.getProperties()).buildServiceRegistry ();
		 */
		// 创建SessionFactory实例
		sessionFactory = configuration.buildSessionFactory(registry);
	}
	public static Session currentSession() {
		return sessionFactory.openSession();
	}
	public static void closeSession(Session session) {
		if (session != null) {
			session.close();
		}
	}
}
CoderPrince 2015-08-29
  • 打赏
  • 举报
回复
引用 1 楼 gam2046 的回复:
既然创建失败,相关的异常日志是否可以贴出来看看。




帮我看看~谢谢
forDream_ 2015-08-29
  • 打赏
  • 举报
回复
既然创建失败,相关的异常日志是否可以贴出来看看。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧