#spring #jpa-2.0
#весна #jpa-2.0
Вопрос:
У меня есть приложение, использующее Spring 3.0.5, JPA2 и Hibernate 3.6.7. Maven обрабатывает мое управление зависимостями. Вот выдержка из pom:
<properties>
<spring.version>3.0.5.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-hibernate3</artifactId>
<version>2.0.8</version>
<scope>compile</scope>
<exclusions>
<exclusion>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>3.6.7.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.7.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jpa</artifactId>
<version>2.0.8</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hibernate.java-persistence</groupId>
<artifactId>jpa-api</artifactId>
<version>2.0-cr-1</version>
<scope>compile</scope>
</dependency>
...
Приложение отлично собирается, однако при попытке загрузить его контейнер Tomcat жалуется на следующее:
Вызвано: org.springframework.beans.factory.Исключение BeanCreationException: ошибка при создании компонента с именем 'EntityManagerFactory', определенным в ресурсе ServletContext [/WEB-INF/applicationContext.xml ]: Не удалось вызвать метод инициализации; вложенным исключением является java.lang.Ошибка абстрактного метода: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode; в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
Есть мысли о том, что может быть причиной этого? Все зависимости кажутся неповрежденными.
Спасибо.
Ответ №1:
Вы смешиваете артефакты из Spring 2.x и 3.x .
Замените старые версии spring-hibernate3
и spring-jpa
на
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
<scope>compile</scope>
</dependency>
Комментарии:
1. спасибо, что указали на это — удаление ссылки на spring-hibernate3, похоже, проясняет ситуацию
Ответ №2:
У меня была точно такая же проблема. Я был валидатором гибернации (4.2), tomcat 6 и spring 3.0.6. Но я также обновил hibernate с 3.2 до 3.6, но я забыл удалить hibernate-entitymanager.jar
(который является старым jar-файлом hibernate) из classpath.
Ответ №3:
У меня была очень похожая проблема с Hibernate 4.x, Spring 3.x, JPA 2.x и CXF 2.7.5. Я удалил ссылку на артефакт spring-jpa в моем файле maven POM и вставил ваш рекомендуемый фрагмент. Сработало волшебство! Я больше не вижу исключения. Спасибо!