【发布时间】: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示例项目中的详细信息):
- 我的 Eclipse 项目名称:HibernateExa
-
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> 我的 POJO 是 Person.java。使用eclipse生成Person.hbm.xml。
-
项目包含主要函数: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(); } -
这是错误信息:
初始 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,我提供了更多细节。希望我们能找到它的问题。