创建会话时,getCurrentSession返回null

时间:2015-05-13 19:33:40

标签: java hibernate maven nullpointerexception

我在部署nullPointerException时收到Maven Web Application JSF-2.2 +Hibernate

ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host]
.[/maven-project].[FacesServlet]] (http-localhost/127.0.0.1:8080-1)
 JBWEB000236: Servlet.service() for servlet FacesServlet threw exception:
java.lang.NullPointerException
at com.ubosque.mb.CiudadanoMB.getAllCiudadanos(CiudadanoMB.java:28)
 [classes:]

当我看一下com.ubosque.mb.CiudadanoMB.getAllCiudadanos(CiudadanoMB.java:28)时 这是出现的界限:

sesion = HibernateSessionFactory.getSessionFactory().getCurrentSession();

HibernateSessionFactory类:

    private static SessionFactory sessionFactory = setSessionFactory();

private  static SessionFactory setSessionFactory() {

    try {
        if (sessionFactory == null) {  //  if  session  == null 
            Configuration config = new Configuration().configure();
            StandardServiceRegistryBuilder regbuild = new StandardServiceRegistryBuilder();
            StandardServiceRegistry builder = regbuild.applySettings(config.getProperties()).build();
            sessionFactory = config.buildSessionFactory(builder);
         }//  if session  == null                               
    } catch (Exception e) {
        e.printStackTrace();
    }// try - catch
    return sessionFactory;
}// setSessionFactory

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}

似乎无法找到我的问题,我只是在学习Hibernate。提前完成。

2 个答案:

答案 0 :(得分:0)

private static SessionFactory sessionFactory = setSessionFactory();

由于某种原因,此行失败,并将sessionFactory保持为null。这会在您的NPE被抛出之前发生,显然,这导致HibernateSessionFactory.getSessionFactory()返回null,这反过来导致您的NPE,所以我建议您查看输出并检查setSessionFactory打印到您的NP {1}}的堆栈跟踪标准输出。

此外,这种实例化会话工厂的方式很脏 - 你不确定它是否实际被实例化。该异常可能不应该被捕获,但应该抛出IllegalStateException(最有可能)与原始异常作为原因:

try {
    // ...                         
} catch (Exception e) {
    throw new IllegalStateException(e);
}// try - catch

这样,如果您的应用程序崩溃,您实际上至少可以了解它。

答案 1 :(得分:0)

当您调用方法getCurrentSession()时,休眠意味着已经创建了会话实例。但事实并非如此(它为null,因此它会抛出NullPointerEx)。首先,您必须使用方法openSession()创建会话,之后您可以调用方法getCurrentSession()