休止状態を学ぶために、練習用に 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 サンプル プロジェクトの詳細):
- 私の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: 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:
基本的に、この例は、休止状態の使用方法を練習するのに役立ちます。それにもかかわらず、プロジェクトを作成する最初の段階で問題が発生しました。
うまくいけば、この問題をすぐに解決できます。アドバイスをください、ありがとう。