2012-04-11 1 views
2

Я пытаюсь добавить Spring Data JPA в свой проект, чтобы я мог использовать интерфейс репозиториев.Почему Spring Data JPA прерывает ранее работающий файл persistence.xml?

Предпринятые шаги - applicationContext.xml:

  • Добавлено xmlns:jpa="http://www.springframework.org/schema/data/jpa" тэгу моего файла applicationContext.xml.

    • Добавлено http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.0.xsd к xsi:schemaLocation определения в теге моего applicationContext.xml файла

    • Добавлено <jpa:repositories base-package="com.myproject.persistence" /> в качестве дочернего тега моего файла applicationContext.xml

Полученные шаги - POM

<dependency> 
<groupId>org.springframework.data</groupId> 
<artifactId>spring-data-jpa</artifactId> 
<version>1.0.3.RELEASE</version> 
<exclusions> 
<exclusion> 
<groupId>commons-logging</groupId> 
<artifactId>commons-logging</artifactId> 
</exclusion> 
</exclusions> 
</dependency> 

Это приводит к тому, что мой сервер жалуется на ранее тонкой конфигурации persistence.xml:

org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 248; cvc-complex-type.3.1: Value '2.0' of attribute 'version' of element 'persistence' is not valid with respect to the corresponding attribute use. Attribute 'version' has a fixed value of '1.0'. 

Почему добавление Spring Data JPA вдруг попробовать и регресс JPA обратно до 1,0 ?!

Полный POM следует.

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com</groupId> 
    <artifactId>myproject</artifactId> 
    <packaging>war</packaging> 
    <version>0.1.0.BUILD-SNAPSHOT</version> 
    <name>myproject</name> 
    <properties> 
     <aspectj.version>1.6.12</aspectj.version> 
     <java.version>6</java.version> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <roo.version>1.2.1.RELEASE</roo.version> 
     <slf4j.version>1.6.4</slf4j.version> 
     <spring.version>3.1.0.RELEASE</spring.version> 
    </properties> 
    <repositories> 
     <repository> 
      <id>spring-maven-release</id> 
      <name>Spring Maven Release Repository</name> 
      <url>http://maven.springframework.org/release</url> 
     </repository> 
     <repository> <id>spring-maven-milestone</id> <name>Spring Maven Milestone 
      Repository</name> <url>http://maven.springframework.org/milestone</url> 
     </repository> 
     <repository> 
      <id>spring-roo-repository</id> 
      <name>Spring Roo Repository</name> 
      <url>http://spring-roo-repository.springsource.org/release</url> 
     </repository> 
     <repository> 
      <id>java.net.m2</id> 
      <url>http://download.java.net/maven/2</url> 
     </repository> 
     <repository> 
      <id>prime-repo</id> 
      <url>http://repository.primefaces.org</url> 
      <name>PrimeFaces Maven Repository</name> 
     </repository> 
     <repository> 
      <id>JBoss Repo</id> 
      <url>https://repository.jboss.org/nexus/content/repositories/releases</url> 
      <name>JBoss Repo</name> 
     </repository> 
    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>spring-maven-release</id> 
      <name>Spring Maven Release Repository</name> 
      <url>http://maven.springframework.org/release</url> 
     </pluginRepository> 
     <pluginRepository> 
      <id>spring-maven-milestone</id> 
      <name>Spring Maven Milestone Repository</name> 
      <url>http://maven.springframework.org/milestone</url> 
     </pluginRepository> 
     <pluginRepository> 
      <id>spring-roo-repository</id> 
      <name>Spring Roo Repository</name> 
      <url>http://spring-roo-repository.springsource.org/release</url> 
     </pluginRepository> 
    </pluginRepositories> 
    <dependencies> 
     <!-- General dependencies for standard applications --> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.10</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.16</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>${slf4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>jcl-over-slf4j</artifactId> 
      <version>${slf4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>${slf4j.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjrt</artifactId> 
      <version>${aspectj.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.aspectj</groupId> 
      <artifactId>aspectjweaver</artifactId> 
      <version>${aspectj.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.5</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax.inject</groupId> 
      <artifactId>javax.inject</artifactId> 
      <version>1</version> 
     </dependency> 
     <dependency> 
      <groupId>net.sf.flexjson</groupId> 
      <artifactId>flexjson</artifactId> 
      <version>2.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.1</version> 
     </dependency> 
     <!-- ROO dependencies --> 
     <dependency> 
      <groupId>org.springframework.roo</groupId> 
      <artifactId>org.springframework.roo.annotations</artifactId> 
      <version>${roo.version}</version> 
      <scope>provided</scope> 
     </dependency> 
     <!-- Spring dependencies --> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${spring.version}</version> 
      <exclusions> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-jpa</artifactId> 
      <version>1.0.3.RELEASE</version> 
      <exclusions> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>${spring.version}</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aspects</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.18</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>3.6.9.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>3.6.9.Final</version> 
      <exclusions> 
       <exclusion> 
        <groupId>cglib</groupId> 
        <artifactId>cglib</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>dom4j</groupId> 
        <artifactId>dom4j</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jpa</artifactId> 
      <version>2.0.8</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.0-api</artifactId> 
      <version>1.0.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>4.2.0.Final</version> 
      <exclusions> 
       <exclusion> 
        <groupId>javax.xml.bind</groupId> 
        <artifactId>jaxb-api</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.xml.bind</groupId> 
        <artifactId>jaxb-impl</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>javax.validation</groupId> 
      <artifactId>validation-api</artifactId> 
      <version>1.0.0.GA</version> 
     </dependency> 
     <dependency> 
      <groupId>cglib</groupId> 
      <artifactId>cglib-nodep</artifactId> 
      <version>2.2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.transaction</groupId> 
      <artifactId>jta</artifactId> 
      <version>1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-pool</groupId> 
      <artifactId>commons-pool</artifactId> 
      <version>1.5.6</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-dbcp</groupId> 
      <artifactId>commons-dbcp</artifactId> 
      <version>1.3</version> 
      <exclusions> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>xml-apis</groupId> 
        <artifactId>xml-apis</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.primefaces</groupId> 
      <artifactId>primefaces</artifactId> 
      <version>3.2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.primefaces.themes</groupId> 
      <artifactId>south-street</artifactId> 
      <version>1.0.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>${spring.version}</version> 
     </dependency> 

     <dependency> 
      <groupId>javax.el</groupId> 
      <artifactId>el-api</artifactId> 
      <version>2.2</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>commons-fileupload</groupId> 
      <artifactId>commons-fileupload</artifactId> 
      <version>1.2.2</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>2.1</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.13</version> 
      <classifier /> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>3.6.4.Final</version> 
      <classifier /> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>3.6.4.Final</version> 
      <classifier /> 
      <exclusions> 
       <exclusion> 
        <groupId>cglib</groupId> 
        <artifactId>cglib</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>dom4j</groupId> 
        <artifactId>dom4j</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.0-api</artifactId> 
      <version>1.0.0.Final</version> 
      <classifier /> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>4.1.0.Final</version> 
      <classifier /> 
      <exclusions> 
       <exclusion> 
        <groupId>javax.xml.bind</groupId> 
        <artifactId>jaxb-api</artifactId> 
       </exclusion> 
       <exclusion> 
        <groupId>com.sun.xml.bind</groupId> 
        <artifactId>jaxb-impl</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
     <dependency> 
      <groupId>cglib</groupId> 
      <artifactId>cglib-nodep</artifactId> 
      <version>2.2</version> 
      <classifier /> 
     </dependency> 
     <dependency> 
      <groupId>commons-pool</groupId> 
      <artifactId>commons-pool</artifactId> 
      <version>1.5.4</version> 
      <classifier /> 
      <exclusions> 
       <exclusion> 
        <groupId>commons-logging</groupId> 
        <artifactId>commons-logging</artifactId> 
       </exclusion> 
      </exclusions> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.1.1</version> 
       <!-- <configuration> <webXml>target/web.xml</webXml> </configuration> --> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>${java.version}</source> 
        <target>${java.version}</target> 
        <encoding>${project.build.sourceEncoding}</encoding> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>aspectj-maven-plugin</artifactId> 
       <version>1.2</version> 
       <!-- NB: do not use 1.3 or 1.3.x due to MASPECTJ-90 and do not use 1.4 
        due to declare parents issue --> 
       <dependencies> 
        <!-- NB: You must use Maven 2.0.9 or above or these are ignored (see 
         MNG-2972) --> 
        <dependency> 
         <groupId>org.aspectj</groupId> 
         <artifactId>aspectjrt</artifactId> 
         <version>${aspectj.version}</version> 
        </dependency> 
        <dependency> 
         <groupId>org.aspectj</groupId> 
         <artifactId>aspectjtools</artifactId> 
         <version>${aspectj.version}</version> 
        </dependency> 
       </dependencies> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
          <goal>test-compile</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <outxml>true</outxml> 
        <aspectLibraries> 
         <aspectLibrary> 
          <groupId>org.springframework</groupId> 
          <artifactId>spring-aspects</artifactId> 
         </aspectLibrary> 
        </aspectLibraries> 
        <source>${java.version}</source> 
        <target>${java.version}</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.5</version> 
       <configuration> 
        <encoding>${project.build.sourceEncoding}</encoding> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.9</version> 
       <configuration> 
        <printSummary>false</printSummary> 
        <redirectTestOutputToFile>true</redirectTestOutputToFile> 
        <excludes> 
         <exclude>**/*_Roo_*</exclude> 
        </excludes> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <version>2.2.1</version> 
       <configuration> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-deploy-plugin</artifactId> 
       <version>2.7</version> 
      </plugin> 
      <!-- IDE --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-eclipse-plugin</artifactId> 
       <version>2.7</version> 
       <!-- Note 2.8 does not work with AspectJ aspect path --> 
       <configuration> 
        <downloadSources>true</downloadSources> 
        <downloadJavadocs>false</downloadJavadocs> 
        <wtpversion>2.0</wtpversion> 
        <additionalBuildcommands> 
         <buildCommand> 
          <name>org.eclipse.ajdt.core.ajbuilder</name> 
          <arguments> 
           <aspectPath>org.springframework.aspects</aspectPath> 
          </arguments> 
         </buildCommand> 
         <buildCommand> 
          <name>org.springframework.ide.eclipse.core.springbuilder</name> 
         </buildCommand> 
        </additionalBuildcommands> 
        <additionalProjectnatures> 
         <projectnature>org.eclipse.ajdt.ui.ajnature</projectnature> 
         <projectnature>com.springsource.sts.roo.core.nature</projectnature> 
         <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> 
        </additionalProjectnatures> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-idea-plugin</artifactId> 
       <version>2.2</version> 
       <configuration> 
        <downloadSources>true</downloadSources> 
        <dependenciesAsLibraries>true</dependenciesAsLibraries> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.codehaus.mojo</groupId> 
       <artifactId>tomcat-maven-plugin</artifactId> 
       <version>1.1</version> 
      </plugin> 
      <plugin> 
       <groupId>org.mortbay.jetty</groupId> 
       <artifactId>jetty-maven-plugin</artifactId> 
       <version>8.0.1.v20110908</version> 
       <configuration> 
        <webAppConfig> 
         <contextPath>/${project.name}</contextPath> 
        </webAppConfig> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Редактировать: Следующие поставщики персистентности относятся к зависимостям для Spring Data JPA. Я добавил их все в список исключений для моего POM. Это не работает!

Следующие поставщики устойчивости, указанные в POM Spring Data, добавили их все в список исключений. Все еще сломан.

<dependency> 
<groupId>org.hibernate</groupId> 
<artifactId>hibernate-entitymanager</artifactId> 
<version>${hibernate.version}</version> 
<optional>true</optional> 
</dependency> 
<dependency> 
<groupId>org.eclipse.persistence</groupId> 
<artifactId>org.eclipse.persistence.jpa</artifactId> 
<version>${eclipselink.version}</version> 
<optional>true</optional> 
</dependency> 
<dependency> 
<groupId>org.apache.openjpa</groupId> 
<artifactId>openjpa-persistence-jdbc</artifactId> 
<version>${openjpa.version}</version> 
<optional>true</optional> 
<exclusions> 
<exclusion> 
<groupId>commons-logging</groupId> 
<artifactId>commons-logging</artifactId> 
</exclusion> 
</exclusions> 
</dependency> 

JPA зависимости в соответствии с Eclipse: -

Screenshot

+1

, что весна-jpa и hibernate-jpa кажутся странными. Кроме того, должно быть хорошо. – Bozho

+0

Оказалось, что мне нужно было удалить свой старый спящий режим. Казалось, что он был интуитивно понятным, так как он был v2.0 и там до Spring Data JPA, но я не буду спорить! Вставьте его в качестве ответа, и я приму его, чтобы вы получили баллы :-) Спасибо! – 8bitjunkie

+0

Я восстановил свой первоначальный ответ :) – Bozho

ответ

1

Проверить то ли вы не имеете другую баночку JPA на пути к классам (либо тащили по пружинных данных или какой-то забытой зависимость (hibernate-jpa) или на сервере приложений).

+0

Привет. Раньше я использовал JPA 2.0, так как это файл persistence.xml.Добавление Spring Data JPA приводит к тому, что это регрессирует, но я думал, что Spring Data JPA было очень новым предложением? – 8bitjunkie

+0

меня тоже, но некоторые вещи могут быть неправильными. Не могли бы вы проверить свою иерархию зависимостей для JPA 1? – Bozho

+0

Добавлен снимок экрана иерархии – 8bitjunkie

0

Неправильная зависимость связана с spring-jpa, которая реализует JPA 1 и имеет приоритет над вашей реализацией JPA 2, представленной здесь с помощью hibernate-jpa-2.0-api. Вам это просто не нужно, поскольку у вас уже есть spring-data-jpa и hibernate-jpa-2.0-api. Просто удалите зависимость spring-jpa от вашего pom.xml, и все будет хорошо.

Смежные вопросы