hibernate错误java.lang.ClassNotFoundException:javax.persistence.persistence意味着什么?

hibernate错误java.lang.ClassNotFoundException:javax.persistence.persistence意味着什么?,java,hibernate,servlets,jpa,Java,Hibernate,Servlets,Jpa,我有一个使用Tomcat7和Hibernate4.3的简单servlet项目,但是当我尝试使用Hibernate但不知道发生了什么时,我遇到了一个错误 基本上,我的servlet调用Persistence.createEntityManager工厂(Persistence\u UNIT),使用工厂调用factory.createEntityManager(),使用实体管理器,它将尝试持久化使用Http请求中的参数创建的对象。 当我调用从persistence获取工厂的第一个方法时,服务器引发了j

我有一个使用Tomcat7和Hibernate4.3的简单servlet项目,但是当我尝试使用Hibernate但不知道发生了什么时,我遇到了一个错误

基本上,我的servlet调用
Persistence.createEntityManager工厂(Persistence\u UNIT)
,使用工厂调用
factory.createEntityManager()
,使用实体管理器,它将尝试持久化使用Http请求中的参数创建的对象。 当我调用从
persistence
获取工厂的第一个方法时,服务器引发了
java.lang.ClassNotFoundException:javax.persistence.persistence
的异常。以下是堆栈:

unit1
是我的软件包)

下面是hibernatedoaluno.java:16行:

EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
考虑

private static final String PERSISTENCE_UNIT = "lpoo2_unit1";
这是我的
persistence.xml
文件,在META-INF文件夹中:

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
         http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
        version="2.0">

    <persistence-unit name="lpoo2_unit1">
        <!-- provedor/implementacao do JPA -->
        <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <!-- entidade mapaeada -->
        <class>unit1.model.Aluno</class>
        <class>unit1.model.Disciplina</class>
        <class>unit1.model.Professor</class>
        <class>unit1.model.Turma</class>

        <properties>
            <!-- dados da conexao -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/lpoo2" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />

            <!-- propriedades do hibernate -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="true" />

            <!-- atualiza o banco, gera as tableas se for preciso -->
            <property name="hibernate.hbm2ddl.auto" value="update" />

        </properties>
    </persistence-unit>

</persistence>

org.hibernate.ejb.HibernatePersistence
单元1.model.Aluno
单元1.模型
模型教授
单元1.model.Turma

我做错了什么?我需要帮助。谢谢大家!

您的类路径缺少javax.persistence库。这是JavaEESDK的一部分(您可以在开发应用程序时使用它,但它不是JavaSESDK的一部分,您肯定会使用它来运行Tomcat应用程序服务器)

解决方案:

  • 将javax.persistence库添加到类路径
  • (或)使用JavaEE环境运行tomcat

请记住,您可以在调用java时将库添加到类路径中,将其设置为tomcat的参数,将其添加到共享库中,或将其添加到web应用程序的“lib”目录中。

您有没有研究过什么是
ClassNotFoundException
以及何时抛出它?@Sotirios Delimanolis我指的是上下文,甚至是e类本身并不重要。引发异常的原因只有一个:类路径上没有必需的类。但是什么类?如果javax.persistence.persistence不在,该类甚至不会编译。有两个命令,
javac
java
。它们都可以接受一个
-cp
选项来指定类路径。如果在
javac
中指定它,编译应该可以工作,否则您将得到某种
无法解析符号的问题。对于
java
,当应用程序尝试加载类路径中未指定的类时,程序将失败。只需检查您的部署。当我将Hibernate JAR放入lib fol时,问题就解决了谢谢。Hibernate有几个库版本,如Hibernate核心、Hibernate注释和完整版本。我自己使用Hibernate核心,没有Hibernate注释,这导致没有与JPA(javax.persistence)不兼容的注释。在这个场景中,我必须自己添加javax.persistence库。我很高兴您找到了解决方案。
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
         http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
        version="2.0">

    <persistence-unit name="lpoo2_unit1">
        <!-- provedor/implementacao do JPA -->
        <provider>org.hibernate.ejb.HibernatePersistence</provider>

        <!-- entidade mapaeada -->
        <class>unit1.model.Aluno</class>
        <class>unit1.model.Disciplina</class>
        <class>unit1.model.Professor</class>
        <class>unit1.model.Turma</class>

        <properties>
            <!-- dados da conexao -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/lpoo2" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />

            <!-- propriedades do hibernate -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.show_sql" value="false" />
            <property name="hibernate.format_sql" value="true" />

            <!-- atualiza o banco, gera as tableas se for preciso -->
            <property name="hibernate.hbm2ddl.auto" value="update" />

        </properties>
    </persistence-unit>

</persistence>