2016-07-09 3 views
0

"4.3.11.Final"버전의 Hibernate 코어와 엔티티 관리자를 사용하는 Maven 프로젝트를 가지고 있습니다. 모든 것이 잘 작동합니다. 오늘은 최신 (5.2.1.Final) 내의 pom.xml에 의존성의 버전을 변경하고 내 프로젝트는 갑자기 실패 스레드에서버전 5.0으로 업데이트 할 때 왜 "EntityManager에 대한 지속성 공급자 없음"이 표시됩니까?

예외 "주"javax.persistence.PersistenceException을 :
를 wiki라는 EntityManager에 대한 지속성 공급자가 없습니다.

내가 만든 유일한 변경 사항은 버전 번호입니다. Hibernate 5를 사용하기 위해서 필요한 설정이 있습니까? 나는 5.0 Migration Guide에 아무것도 찾지 못했습니다.

import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 

public final class SchemeExport { 

    private static final String PERSISTENCE_UNIT = "wiki"; 

    public static void main(String... args){ 
     // fails on the line below 
     EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT); 
     EntityManager manager = factory.createEntityManager(); 
     manager.close(); 
     factory.close(); 
    } 
} 

내 지속성 파일 :

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="wiki"> 

     <provider>org.hibernate.ejb.HibernatePersistence</provider> 

     <class>model.Article</class> 
     <class>model.ArticleMeta</class> 
     <class>model.Category</class> 
     <class>model.Collaborator</class> 
     <exclude-unlisted-classes>true</exclude-unlisted-classes> 

     <properties> 
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/wiki?useUnicode=true&amp;useJDBCCompliantTimezoneS‌​hift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC"/> 
      <property name="javax.persistence.jdbc.user" value="root"/> 
      <property name="javax.persistence.jdbc.password" value="root"/> 

      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect"/> 
      <property name="hibernate.show_sql" value="true"/> 
      <property name="hibernate.format_sql" value="true"/> 

      <!--<property name="hibernate.hbm2ddl.auto" value="update"/>--> 
      <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

내 '의 pom.xml'(생략 그룹/아티팩트 속성 여기


내 파일은 내가 실행하고있어 클래스입니다) :

<?xml version="1.0" encoding="UTF-8"?> 
<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/xsd/maven-4.0.0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <properties> 
     <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>6.0.3</version> 
     </dependency> 
     <!--<dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.3.11.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.3.11.Final</version> 
     </dependency>--> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>5.2.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>5.2.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-web-api</artifactId> 
      <version>7.0</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
        <compilerArguments> 
         <endorseddirs>${endorsed.dir}</endorseddirs> 
        </compilerArguments> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.3</version> 
       <configuration> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.6</version> 
       <executions> 
        <execution> 
         <phase>validate</phase> 
         <goals> 
          <goal>copy</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${endorsed.dir}</outputDirectory> 
          <silent>true</silent> 
          <artifactItems> 
           <artifactItem> 
            <groupId>javax</groupId> 
            <artifactId>javaee-endorsed-api</artifactId> 
            <version>7.0</version> 
            <type>jar</type> 
           </artifactItem> 
          </artifactItems> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

</project> 

답변

3

귀하는 wron을 사용하고 있습니다. g/old persistence provider를 persistence.xml에 추가하십시오. 그래서

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 

<provider>org.hibernate.ejb.HibernatePersistence</provider> 

교체