首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javax.persistence.PersistenceContext.synchronization :java.lang.NoSuchMethodError

javax.persistence.PersistenceContext.synchronization :java.lang.NoSuchMethodError
EN

Stack Overflow用户
提问于 2019-09-05 07:03:09
回答 3查看 4.7K关注 0票数 2

在Tomcat 8.0.36上部署应用程序时,我会得到以下异常

org.springframework.beans.factory.BeanCreationException:错误创建名为“eventsDAOImpl”的bean --合并bean定义的后处理失败;嵌套异常为java.lang.NoSuchMethodError: javax.persistence.PersistenceContext.synchronization()Ljavax/persistence/SynchronizationType;在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:756) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:409) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4842) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase在org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701),org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717),org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:940),org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1816),java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511),java.util。concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) at: java.lang.NoSuchMethodError: javax.persistence.PersistenceContext.synchronization()Ljavax/persistence/SynchronizationType;org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.(PersistenceAnnotationBeanPostProcessor.java:653) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.lambda$buildPersistenceMetadata$0(PersistenceAnnotationBeanPostProcessor.java:416) at org.springframework.util.ReflectionUtils.doWithLocalFields(ReflectionUtils.java:693) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.buildPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:410) at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findPersistenceMetadata(PersistenceAnnotationBeanPostProcessor.java:394)在org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(PersistenceAnnotationBeanPostProcessor.java:332) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1015) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557) . 24

我使用eclipselink版本2.5.2,并在tomcat的lib文件夹中添加了以下jars

  1. eclipselink-2.5.2.jar
  2. javax.persistence-api-2.2.jar
  3. ojdbc6-12.1.0.1.jar

dependencies.gradle如下所示

代码语言:javascript
复制
compile (
        'org.aspectj:aspectjrt:1.8.4',
        'org.aspectj:aspectjweaver:1.8.4',
        'org.springframework:spring-aspects:5.0.0.RELEASE',
        'org.springframework:spring-jdbc:5.0.0.RELEASE',
        'org.springframework:spring-jms:5.0.0.RELEASE',
        'org.springframework:spring-orm:5.0.0.RELEASE',
        'org.springframework:spring-oxm:5.0.0.RELEASE',
        'org.springframework:spring-web:5.0.0.RELEASE',
        'org.springframework:spring-webmvc:5.0.0.RELEASE',
        'org.springframework:spring-instrument-tomcat:4.0.9.RELEASE'
    }
    provided (
        'com.oracle:ojdbc6:12.1.0.1',
        'org.eclipse.persistence:eclipselink:2.5.2'
    )

编辑1:相同的应用程序在Tomcat 9上运行良好,但在部署Tomcat 8时提供了上述异常

编辑2:在做了一些研究之后,我发现Tomcat 8正在从注释中加载PersistenceContext类--api.jar位于TOMCAT_HOME\lib文件夹中,而不是javax.persistence-api-2.2.jar和注释中可用的PersistenceContext类-api.jar不包含如下的同步方法。

代码语言:javascript
复制
package javax.persistence;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PersistenceContext {
  String name() default "";

  String unitName() default "";

  PersistenceContextType type() default PersistenceContextType.TRANSACTION;

  PersistenceProperty[] properties() default {};
}

如何在Tomcat 8中提供首选项,以便Tomcat 8将从javax.persistence-api-2.2.jar而不是注释-api.jar加载PersistenceContext类

EN

回答 3

Stack Overflow用户

发布于 2019-09-05 08:31:49

可能您在春季数据依赖项中有冲突,第一个版本是vesion1 (或者复制两个相同的jar,您可以说)另一个版本是version2,请从pom.xml或构建路径jar中删除旧版本依赖

可能那里没有Spring或依赖项,请添加它。

票数 1
EN

Stack Overflow用户

发布于 2020-11-25 21:48:54

org.hibernate.javax.persistence:hibernate-jpa-2.0-api:1.0.1.Finals提供了一个缺少API PersitanceContext().synchronization()的旧版本的.synchronization()

解决方案:在pom.xml中添加java.persistence:javax.persistence-api:2.2在hibernate-jpa-2.0-api之前

代码语言:javascript
复制
        <dependency>
        <groupId>javax.persistence</groupId>
        <artifactId>javax.persistence-api</artifactId>
        <version>2.2</version>
    </dependency>

    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.0-api</artifactId>
        <version>1.0.1.Final</version>
    </dependency>

不知道格拉德尔,但至少你可以试试。

票数 0
EN

Stack Overflow用户

发布于 2020-06-08 22:10:32

我在PersistenceContext.class中看到了synchronization()方法的javax.persistence-api-2.2.jar。从Tomcat 7开始,Apache似乎已经从PersistenceContext (以及其他类)中删除了annotations-api.jar,这意味着它不能从Tomcat提供的jar加载这个类。也许您的应用程序中有另一个jar,其中包含一个旧版本的PersistenceContext

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57800059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档