1

アプリケーションの構築に 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 を追加しました。それは修正されます。ありがとう!

**

4

5 に答える 5

0

あなたのコードでは、 new DBConnection() は何を参照していますか。org.hibernate.SessionFactory.SessionFactory から Hibernate でセッションを取得/開く必要があります。そのため、sessionfactory を使用しているかどうかを確認してください。

于 2013-10-07T10:51:00.693 に答える
0

log4j がこの問題の原因です。Log4j を削除し、log4j-1.2.16.jar を追加しました。それは修正されます。ありがとう!

于 2013-10-07T13:19:35.730 に答える
0

試してください

Configuration configuration = new AnnotationConfiguration();
于 2013-10-07T11:22:23.477 に答える
0

あなたのコードでは、 2 回呼び出していますsession.close();。2catch句とfinally句 Here :

catch(HibernateException ex)
{
    if (tx!=null) tx.rollback();
    ex.printStackTrace();
    session.close(); <--- 
    DBConnection.close();
}

そしてここ :

finally{
    session.close(); <-----
    DBConnection.close();
    }

java の try-catch-finally ステートメントではfinally、例外がスローされたかどうかに関係なく実行されることに注意してください。あなたの場合、例外が発生session.close()すると、2回呼び出されます。節で1 回、catch節で 2 回目finally。2回呼び出しているときの休止状態の動作がわかりませんsession.close()

于 2013-10-07T11:23:39.997 に答える