3

休止状態を学ぶために、練習用に 2 つの例を書きます。ただし、どちらにも次のような同じエラーがあります。

sessionFactory object.java.lang.NoClassDefFoundError: javax/transaction/SystemException Exception in thread "main" java.lang.ExceptionInInitializerError 原因:​​ java.lang.NoClassDefFoundError: javax/transaction/SystemException at java.lang.Class.forName0 (ネイティブメソッド) org.jboss.logging.Logger.getMessageLogger(Logger.java:2248) の java.lang.Class.forName(未知のソース) org.jboss.logging.Logger.getMessageLogger(Logger.java:2214) org.hibernate.cfg.Configuration.(Configuration.java:184) で com.example.ManageEmployee.main(ManageEmployee.java:17) で

基本的にPOJOを先に書いて、eclipseを使うとhbm.xmlが生成されます。その後、データベースを管理する main 関数を書きます。2回試しましたが、同じ問題が発生しました。

誰かがこの問題を解決するためのアドバイスをくれませんか? その前に、JDBC を使用してプロジェクトをビルドしますが、それは複雑すぎます。だから私は休止状態を学ぶ必要があります。ありがとうございました。

補足 (この hibernate サンプル プロジェクトの詳細):

  1. 私のEclipseプロジェクト名:HibernateExa
  2. hibernate.cfg.xml :

    <session-factory>
    
        <!-- hibernate dialect -->
    
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">hibernateTest</property>
    
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernatetest;</property>
        <property name="hibernate.connection.username">hibernater</property>
        <property name="hibernate.default_schema">hibernatetest</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    
        <!-- Automatic schema creation(begin) -->
        <property name="hibernate.hbm2ddl.auto">create</property>
        <!-- Simple memory-only cache -->
        <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
        <!-- Enable Hibernate's automatic session context management -->
        <property name="current_session_context_class">thread</property>
    
        <!-- mapping files with external dependencies -->
        <mapping resource="com/sample/Person.hbm.xml"/>
    
    
    </session-factory>
    

  3. 私の POJO はPerson.javaです。Eclipse を使用すると、 Person.hbm.xmlが生成されます。

  4. プロジェクトにはメイン関数が含まれています: TestPerson.java

    public static void main(String [] args){
    
        Session session = SessionFactoryUtil.getSessionFactory().getCurrentSession();
    
        session.beginTransaction();
    
        createPerson(session);
        queryPerson(session);
    
    }
    
    public static void createPerson(Session session){
        Person person = new Person();
    
        person.setName("Jack");
        person.setSurname("Yu");
        person.setAddress("White House");
    
        session.save(person);
    }
    
    private static void queryPerson(Session session){
        Query query = session.createQuery("from person");
        List<Person> list = new ArrayList<Person>();
        list = query.list();
        java.util.Iterator<Person> iter = list.iterator();
    
        while(iter.hasNext()){
            Person person = iter.next();
            System.out.println("Person: \"" + person.getName() + "\", "+ person.getSurname() + "\", "
                    + person.getAddress());
        }
    
        session.getTransaction().commit();
    }
    
  5. エラー情報は次のとおりです。

    最初の SessionFactory の作成に失敗しました。java.lang.NoClassDefFoundError: com.sample.TestPerson.main(TestPerson.java:14) の com.sample.SessionFactoryUtil.(SessionFactoryUtil.java:17) でのスレッド "main" java.lang.ExceptionInInitializerError の javax/persistence/EntityListeners 例外) 原因: java.lang.NoClassDefFoundError: javax/persistence/EntityListeners at org.hibernate.cfg.annotations.reflection.JPAMetadataProvider.getDefaults(JPAMetadataProvider.java:97) at org.hibernate.annotations.common.reflection.java.JavaReflectionManager .getDefaults(JavaReflectionManager.java:226) org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1331) org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1756) org.hibernate.cfg. Configuration.buildSessionFactory(Configuration.java:

基本的に、この例は、休止状態の使用方法を練習するのに役立ちます。それにもかかわらず、プロジェクトを作成する最初の段階で問題が発生しました。

うまくいけば、この問題をすぐに解決できます。アドバイスをください、ありがとう。

4

4 に答える 4

6

lib フォルダーにすべての jar ファイルがあることを確認してください。

lib/antlr.jar
lib/cglib.jar
lib/asm.jar
lib/commons-collections.jar
lib/commons-logging.jar
lib/jta.jar
lib/dom4j.jar
lib/log4j.jar
lib/hibernate3.jar
于 2013-09-10T08:10:17.000 に答える
1

問題は解決しました!みんなのアドバイスに感謝します。

そこで、問題を要約して解決策を示します。

エラー: 最初の SessionFactory の作成に失敗しました。java.lang.NoClassDefFoundError. 一部の jar ファイルが欠落しています。

hibernate プロジェクトを設定するための jar ファイルのリストは次のとおりです。

ここに画像の説明を入力

  1. スレッド "main" org.hibernate.hql.ast.QuerySyntaxException での例外: person がマップされていません [from person] hibernate クエリはオブジェクトに基づいているため、from person は from Person である必要があります。
  2. 正しい接続 URL:

    jdbc:mysql://localhost:3306/hibernatetest?useUnicode=true&characterEncoding=GBK

  3. DB では、ID は INT です。ただし、Person.hbm.xml では、id タイプを「long」に変更します。したがって、期待される結果が得られます。

于 2013-09-10T16:06:34.233 に答える
0

以下の依存関係を pom.xml 内に配置するか、クラスパスに persistence-api jar を追加します。

<dependency>
   <groupId>javax.persistence</groupId>
   <artifactId>persistence-api</artifactId>
   <version>1.0</version>
</dependency>
于 2018-11-04T04:43:26.140 に答える