Не удалось вызвать метод инициализации; вложенным исключением является java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index

Я пытаюсь перейти с Tomcat 7.0.63 на 8.5 и столкнулся с этим исключением NoSuchMethodError. У меня есть hibernate 4.3.8, hibernate-jpa-2.1-api-1.0.0.Final.jar и spring mvc 4.1.4. трассировка исключения выглядит следующим образом:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in com.xps.XPSConfig: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1566)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:663)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:629)
at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:677)
at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:548)
at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:489)
at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
at javax.servlet.GenericServlet.init(GenericServlet.java:158)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1183)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:779)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
at org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:478)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:973)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:824)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3845)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3799)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1412)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:852)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:845)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:398)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:844)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562)
... 34 more

person Jason    schedule 02.02.2017    source источник
comment
Искренне ценю это, если бы вы могли потратить несколько минут, чтобы помочь!   -  person Jason    schedule 02.02.2017
comment
вы используете maven для получения этих зависимостей?   -  person Maciej Kowalski    schedule 02.02.2017
comment
нет. Tomcat8.5 был загружен как бинарный файл. все работает с tomcat 7.0.63 до обновления до tomcat 8.5   -  person Jason    schedule 02.02.2017
comment
Возможно, у вас есть разные версии JPA в пути к классам - старая, в которой отсутствует метод javax.persistence.Table.indexes() и которая выбирается первой, и новая.   -  person Igor Nikolaev    schedule 02.02.2017
comment
Я это подозревал. tomcat 8.5, возможно, изменил порядок загрузки классов, так что старое определение было загружено первым. попробовал использовать vm option verbose: class, даже не увидел, что аннотация Table была загружена вообще.   -  person Jason    schedule 02.02.2017


Ответы (1)


У меня была такая же проблема во время миграции. Кажется, ваш hibernate-jpa-2.1-api-1.0.0.Final.jar наносит ущерб. Если у вас есть двойные версии JPA, это также может привести к проблемам. Попробуйте сборку Maven. Для в настоящее время удалите hibernate-jpa-2.1-api-1.0.0.Final.jar и добавьте следующие файлы jar: https://sourceforge.net/projects/hibernate/files/hibernate4/4.1.8.Final/

Добавьте все эти банки в Web-INF/lib. Это решит ваши проблемы.

person Akshay    schedule 02.02.2017
comment
Спасибо, Акшай! пробовал спящий режим 4.1.8. не работает. такая же проблема. попробуйте более поздние версии, посмотрите, поможет ли это. - person Jason; 02.02.2017
comment
Я решил это. и большое спасибо всем, кто пытался помочь! Причина, как и подозревали многие. это старый файл jar, в котором старое определение скрывает правильное. Tomcat 8.5 имеет интересный характер. порядок загрузки библиотек различается между корневыми каталогами и домашними каталогами. поэтому он работает в одном каталоге, но не работает в другом. Это сбило меня с толку и привело к задержке поиска истинной причины. - person Jason; 06.02.2017
comment
Kiddos!! Я предлагаю вам впредь использовать чистую сборку maven, так как это хорошая практика! - person Akshay; 07.02.2017