【问题标题】:Error in Hibernate simple example Beginner levelHibernate 简单示例中的错误初学者级别
【发布时间】:2013-09-13 10:31:42
【问题描述】:

为了学习hibernate,我写了两个例子来练习。但是,它们都有以下相同的错误:

无法创建 sessionFactory object.java.lang.NoClassDefFoundError: 线程“main”中的 javax/transaction/SystemException 异常 java.lang.ExceptionInInitializerError 原因: java.lang.NoClassDefFoundError: javax/transaction/SystemException at java.lang.Class.forName0(本机方法)在 java.lang.Class.forName(未知来源)在 org.jboss.logging.Logger.getMessageLogger(Logger.java:2248) 在 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 函数来管理数据库。我尝试了两次,但都遇到了同样的问题。

有人可以给我建议来解决这个问题吗?在此之前,使用 JDBC 构建一个项目,但这太复杂了。所以我需要学习hibernate。谢谢。

补充(此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: javax/persistence/EntityListeners 线程“主”java.lang.ExceptionInInitializerError 中的异常 在 com.sample.SessionFactoryUtil.(SessionFactoryUtil.java:17) 在 com.sample.TestPerson.main(TestPerson.java:14) 引起:java.lang.NoClassDefFoundError: javax/persistence/EntityListeners 在 org.hibernate.cfg.annotations.reflection.JPAMetadataProvider.getDefaults(JPAMetadataProvider.java:97) 在 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:1840) 在 com.sample.SessionFactoryUtil.(SessionFactoryUtil.java:13) ... 1 更多 引起:java.lang.ClassNotFoundException:javax.persistence.EntityListeners 在 java.net.URLClassLoader$1.run(未知来源) 在 java.net.URLClassLoader$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 sun.misc.Launcher$AppClassLoader.loadClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) ... 7 更多

基本上,这个例子可以帮助我练习如何使用休眠。尽管如此,我在创建项目的一开始就遇到了问题。

希望我能尽快解决这个问题。请给点建议,谢谢。

【问题讨论】:

  • 您在 Eclipse 中的项目库或依赖项中缺少 jta.jar。 (或另一个包含缺失类的等效 jar。)
  • 谢谢madth3,我现在加了jta,还是有这个问题。
  • 如果您正确添加了 JTA,您将不会遇到同样的问题。请添加有关您的 Eclipse 项目以及如何执行它的信息。
  • 嗨 madth3,我提供了更多细节。希望我们能找到它的问题。

标签: java hibernate


【解决方案1】:

请确保您的 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

【讨论】:

  • 您好 Fahimeh,谢谢您的建议。我下载了 hibernate-4.3.0 并获得了包含以下内容的 require jar 文件:antlr-2.7.7 avro-1.6.3 dom4j-1.6.1 hibernate-commons-annotations-4.0.2 hibernate-core-4.2.2 jackson- core-asl-1.9.2 jackson-mapper-asl-1.9.2 javassist-3.15.0-GA jboss-logging-3.1.0 jta-1.1 lucene-core-3.6.2 paranamer-2.3 slf4j-api-1.6.1 snappy-java-1.0.4.1 但还是有同样的问题。
【解决方案2】:

问题解决了!谢谢大家的建议。

所以我总结了问题并给出了解决方案。

错误:初始 SessionFactory 创建失败。 java.lang.NoClassDefFoundError。 缺少一些 jar 文件。

为了设置休眠项目,这里是jar文件的列表:

  1. 线程 "main" org.hibernate.hql.ast.QuerySyntaxException 中的异常:人员未映射 [来自人员] 因为休眠查询基于对象,所以来自人员应该来自人员。
  2. 正确的连接网址:

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

  3. 在 DB 中,id 是 INT。但是,在 Person.hbm.xml 中,我将 id 类型更改为“long”。这样,预期的结果就出来了。

【讨论】:

  • Eric,这些 jars 是否都包含在我们的 hibernate-release5.2.14.Final 文件中,还是我们必须从某个地方下载它们?
【解决方案3】:

在你的 pom.xml 中添加这个依赖

<dependency>
   <groupId>javax.transaction</groupId>
   <artifactId>jta</artifactId>
   <version>1.1</version>
</dependency>

创建一个mvn clean install 并部署。

另一种方式:
下载这个jar:项目-->右键-->构建路径-->添加外部jar

项目-->右键-->属性-->部署程序集-->添加-->从构建路径添加条目(添加这个jar)

现在重新构建项目。

希望它会有所帮助。

【讨论】:

    【解决方案4】:

    将以下依赖项放在你的 pom.xml 中或在你的类路径中添加 persistence-api jar。

    <dependency>
       <groupId>javax.persistence</groupId>
       <artifactId>persistence-api</artifactId>
       <version>1.0</version>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 2016-07-06
      • 2013-09-19
      • 2016-11-17
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 2012-11-17
      • 1970-01-01
      • 2015-02-18
      相关资源
      最近更新 更多