我正在使用hibernate 4来构建应用程序。在运行应用程序时,我收到以下错误。
无法创建sessionFactory object.java.lang.NoSuchFieldError: 线程“main”java.lang.NullPointerException
中的TRACE异常
我的代码段是,
try{
session = new DBConnection().getSession();
tx= session.beginTransaction();
........
........
}catch(HibernateException ex)
{
if (tx!=null) tx.rollback();
ex.printStackTrace();
session.close();
DBConnection.close();
}
catch(Exception ex)
{
ex.printStackTrace();
session.close();
}
finally{
session.close(); // The error is shown in this line while run time
DBConnection.close();
}
DBConnection.java
public DBConnection()
{
try
{
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
factory = configuration.buildSessionFactory(serviceRegistry);
}
catch (Throwable ex) {
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public Session getSession()
{
return factory.openSession();
}
// Call this during shutdown
public static void close() {
factory.close();
}
我的配置文件是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<!-- Assume test is the database name -->
<property name="hibernate.connection.url">
jdbc:mysql://localhost:3306/test
</property>
<property name="hibernate.connection.username">
root
</property>
<property name="hibernate.connection.password">
test
</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="use_sql_comments">false</property>
<property name="hibernate.connection.pool_size">40</property>
</session-factory>
</hibernate-configuration>
请指导我代码或任何jar文件有什么问题?
**
答案:log4j是导致此问题的原因。我删除了Log4j和 添加了log4j-1.2.16.jar。它得到修复。谢谢!
**
答案 0 :(得分:0)
是什么是新的DBConnection()引用。我们需要从org.hibernate.SessionFactory.SessionFactory中获取/打开Hibernate中的会话。因此,请检查您是否使用了sessionfactory。
答案 1 :(得分:0)
请尝试
Configuration configuration = new AnnotationConfiguration();
答案 2 :(得分:0)
在您的代码中,您正在拨打session.close();
两次。
在2 catch
子句和finally
子句中
在这里:
catch(HibernateException ex)
{
if (tx!=null) tx.rollback();
ex.printStackTrace();
session.close(); <---
DBConnection.close();
}
在这里:
finally{
session.close(); <-----
DBConnection.close();
}
请记住,在try-catch-finally语句的java中,无论是否抛出异常,都将执行finally
。在您的情况下,如果引发异常,session.close()
将被调用2次。 catch
子句中的一次和finally
子句中的第二次。当你调用2次session.close()
答案 3 :(得分:0)
如this中所述,您的show_sql,format_sql和use_sql_comments前缀为hibernate。 像
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hibernate.use_sql_comments">false</property>
答案 4 :(得分:0)
log4j是导致此问题的原因。我删除了Log4j并添加了 log4j的-1.2.16.jar。它得到修复。谢谢!