0

我正在开发一个使用 jpa 来控制 mysql db 和 struts 的 java ee 应用程序。不幸的是,当我在 tomcat 服务器上运行项目时,我得到了这个错误。

javax.persistence.PersistenceException:没有名为 prova 的 EntityManager 的持久性提供程序
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:56)
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)
    test.testing.initEntityManager(testing.java:37)
    test.testing.add(testing.java:16)
    sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
    sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)
    java.lang.reflect.Method.invoke(未知来源)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    com.googlecode.s2hibernate.struts2.plugin.s2hibernatevalidator.interceptor.HibernateValidatorInterceptor.intercept(HibernateValidatorInterceptor.java:38)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)

我已经在网上搜索了解决方案,但没有解决我的问题。以下是文件:

src/test/Libro.java

在此处输入图像描述

src/test/testing.java

在此处输入图像描述

src/META-INF/persistence.xml

在此处输入图像描述

src/struts.xml

在此处输入图像描述

网页内容/WEB-INF/web.xml

在此处输入图像描述

网页内容/index.xml

在此处输入图像描述

项目

看法:

在此处输入图像描述

库:

在此处输入图像描述

感谢您的帮助:)

4

1 回答 1

1

主要问题

截图 Lib我们可以看到你有一个非常“混合”的库组合。问题就在这里!您不能混合使用 JPA 的不同 API 级别。您将非常旧/早期的版本 1.x 与JPA 2.2的最新变体混合在一起。

您将两者都persistence-api-1.0.2.jar放入javax.persistence-api-2.2.jar 项目的lib目录中WEB-INF。这会导致运行时发生冲突。

所以:

  • 从文件夹中删除过时persistence-api-1.0.2.jar的文件并检查是否解决了观察到的异常。如果发生其他异常,则在运行时与您的设置存在更多不一致。

其他评论和更改

testing您在方法中的类中误用了事务处理的概念createPlaces()。你的代码是:

em.persist();
em.getTransaction().begin();
em.getTransaction().commit();

这会将persist()调用置于您在该行之后打开的受控事务之外。而不是像上面那样坚持,你应该更好地重新编写这些行,如下所示。该片段将persist操作移动到事务的边界内:

EntityTransaction tx = null;
try {
    tx = em.getTransaction();
    tx.begin();
    // Only within a tx to prevent inconsistent states in the DB if sth fails here!
    em.persist(); 
    tx.commit();
} catch(RuntimeException) {
    if(if(tx != null && tx.isActive()) {
        tx.rollback();
    }   
}

有关更多详细信息,请查看我曾经写过的关于事务处理的另一个答案。它指的是 JPA 2.2,并为您提供了有关此主题的进一步深度。

希望能帮助到你。

于 2019-01-11T08:54:31.563 回答