Hibernate中的错误简单示例初学者级别

时间:2013-09-09 20:39:42

标签: java hibernate

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

  

无法创建sessionFactory object.java.lang.NoClassDefFoundError:   javax / transaction / SystemException线程“main”中的异常   java.lang.ExceptionInInitializerError由以下原因引起:   java.lang.NoClassDefFoundError:javax / transaction / SystemException at   java.lang.Class.forName0(Native Method)at   java.lang.Class.forName(未知来源)at   org.jboss.logging.Logger.getMessageLogger(Logger.java:2248)at at   org.jboss.logging.Logger.getMessageLogger(Logger.java:2214)at at   org.hibernate.cfg.Configuration。(Configuration.java:184)at   com.example.ManageEmployee.main(ManageEmployee.java:17)

基本上,我首先编写POJO,使用eclipse生成hbm.xml。之后,我编写了管理数据库的主要功能。我尝试了两次,但遇到了同样的问题。

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

Supplement(这个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 线程“main”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(未知来源)     at java.security.AccessController.doPrivileged(Native Method)     at java.net.URLClassLoader.findClass(Unknown Source)     at java.lang.ClassLoader.loadClass(Unknown Source)     at sun.misc.Launcher $ AppClassLoader.loadClass(Unknown Source)     at java.lang.ClassLoader.loadClass(Unknown Source)     ......还有7个

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

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

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

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

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

enter image description here

  1. 线程中的异常“main”org.hibernate.hql.ast.QuerySyntaxException:person未映射[来自person]因为hibernate查询基于Object,所以来自person应该来自Person。
  2. 正确的连接网址:

    JDBC:MySQL的://本地主机:3306 / hibernatetest了useUnicode =真安培;的characterEncoding = GBK

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

答案 2 :(得分:0)

在pom.xml中添加此依赖项

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

制作mvn clean install并部署。

另一种方式:
下载此jar :项目 - &gt;右键单击 - &gt;构建路径 - &gt;添加外部jar

项目 - &gt;右键单击 - &gt;属性 - &gt;部署程序集 - &gt;添加 - &gt;从构建路径条目添加(添加此jar)

现在重建项目。

希望它会有所帮助。

答案 3 :(得分:0)

在pom.xml内的依赖项下面放置或在类路径中添加persistence-api jar。

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