什么hibernate错误java.lang.ClassNotFoundException:javax.persistence.Persistence的意思是? [英] What hibernate error java.lang.ClassNotFoundException: javax.persistence.Persistence means?

查看:93
本文介绍了什么hibernate错误java.lang.ClassNotFoundException:javax.persistence.Persistence的意思是?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用Tomcat 7和Hibernate 4.3的简单servlet项目,但是当我尝试使用Hibernate但是不知道发生了什么时,我收到了错误消息。



基本上,我的servlet使用工厂调用 Persistence.createEntityManagerFactory(PERSISTENCE_UNIT),它调用 factory.createEntityManager()和实体管理器一样,它会尝试使用Http请求中的参数来持久化一个对象。
当我调用从<$ c $获取工厂的第一个方法时,服务器引发 java.lang.ClassNotFoundException:javax.persistence.Persistence 的异常C>持久性。这里是堆栈:

unit1 是我的包裹)

  java.lang.ClassNotFoundException:javax.persistence.Persistence $ b $ org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
在org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
在unit1.dao_hibernate.HibernateDaoAluno.inserir(HibernateDaoAluno.java:16)
在unit1.servlet.CadastroAluno。 $ javax.servlet.http.HttpServlet.service上的
(HttpServlet.java:647)$ javax.servlet.http.HttpServlet.service上的
(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
在org.apache.catalina.core .StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke (StandardHostValve.java:171)
在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java :953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor $ Worker.run(未知源)$ b $在java.lang.Thread.run(未知源)

这里是HibernateDaoAluno.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 /持久性
xmlns:xsi =http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation =http://java.sun.com/xml/ns /持久性
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd
version =2.0>

< persistence-unit name =lpoo2_unit1>
<! - provenor / implement支付方式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>

<属性>
<! - dados da conexao - >
< property name =javax.persistence.jdbc.drivervalue =com.mysql.jdbc.Driver/>
< property name =javax.persistence.jdbc.urlvalue =jdbc:mysql:// localhost / lpoo2/>
< property name =javax.persistence.jdbc.uservalue =root/>
< property name =javax.persistence.jdbc.passwordvalue =root/>

<! - - propriedades do hibernate - >
< property name =hibernate.dialectvalue =org.hibernate.dialect.MySQL5InnoDBDialect/>
< property name =hibernate.show_sqlvalue =false/>
< property name =hibernate.format_sqlvalue =true/>

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

< / properties>
< / persistence-unit>

< /持久性>

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

解决方案

您的类路径错过了javax.persistence库。这是Java EE SDK的一部分(您可以在开发应用程序时使用它,但它不是Java SE SDK的一部分,您肯定会使用它来运行Tomcat应用程序服务器。)



解决方案:


  • 将javax.persistence库添加到类路径

  • (或)使用Java EE环境运行您的tomcat。
  • 在调用java时将类库添加到类路径中,将它设置为tomcat的参数,将它添加到共享库或将其添加到Web应用程序的'lib'目录。


    I have a simple servlet project with Tomcat 7 and Hibernate 4.3, but I'm getting an error when I try to use Hibernate but don't known what is happening.

    Basically, my servlet calls Persistence.createEntityManagerFactory(PERSISTENCE_UNIT), with the factory, it calls factory.createEntityManager() and with the entity manager, it will try to persist an object made with the parameters from Http request. The server is raising an exception of java.lang.ClassNotFoundException: javax.persistence.Persistence when I call the first method to get the factory from Persistence. Here is the stack:

    (unit1 is my package)

    java.lang.ClassNotFoundException: javax.persistence.Persistence
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
        at unit1.dao_hibernate.HibernateDaoAluno.inserir(HibernateDaoAluno.java:16)
        at unit1.servlet.CadastroAluno.doPost(CadastroAluno.java:29)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    

    Here is HibernateDaoAluno.java:16 line:

    EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
    

    Consider

    private static final String PERSISTENCE_UNIT = "lpoo2_unit1";
    

    And here is my persistence.xml file, in META-INF folder:

    <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>
    

    What am I doing wrong? I need help. Thank you!

    解决方案

    Your classpath misses the javax.persistence library. This is part of the Java EE SDK (which you might use when developing your application but it is not part of the Java SE SDK which you surely use to run your Tomcat application server.

    Solution:

    • Add the javax.persistence Library to the classpath
    • (Or) Use a Java EE environment to run your tomcat.

    Remember you can add libraries to either the classpath when calling java, set it as argument for your tomcat, add it to shared library or add it to your web-application's 'lib' directory.

    这篇关于什么hibernate错误java.lang.ClassNotFoundException:javax.persistence.Persistence的意思是?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆