2015-04-23 77 views
1

我试图运行基于JPA的示例项目。我始终得到标题中的错误。没有EntityManager的持久性提供者命名(休眠)

我看这里: No Persistence provider for EntityManager named

但没有发现有效的解决方案出现。

这里是我的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> 

    <groupId>~path.example</groupId> 
    <artifactId>example</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <dependencies> 

     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.6</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>ejb3-persistence</artifactId> 
      <version>3.3.2.Beta1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.3.9.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.jst.server.generic</groupId> 
      <artifactId>oc4j</artifactId> 
      <version>1.5.105-v200709061325</version> 
     </dependency> 

     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.0.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
      <version>4.2.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate.common</groupId> 
      <artifactId>hibernate-commons-annotations</artifactId> 
      <version>4.0.1.Final</version> 
      <classifier>tests</classifier> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.0-api</artifactId> 
      <version>1.0.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.validation</groupId> 
      <artifactId>validation-api</artifactId> 
      <version>1.0.0.GA</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.logging</groupId> 
      <artifactId>jboss-logging</artifactId> 
      <version>3.1.0.CR2</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.6.4</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.spec</groupId> 
      <artifactId>jboss-javaee-6.0</artifactId> 
      <version>1.0.0.Final</version> 
      <type>provided</type> 
      <scope>pom</scope> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.arquillian.junit</groupId> 
      <artifactId>arquillian-junit-container</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.spec</groupId> 
      <artifactId>jboss-javaee-6.0</artifactId> 
      <version>1.0.0.Final</version> 
      <type>pom</type> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.arquillian.container</groupId> 
      <artifactId>arquillian-weld-ee-embedded-1.1</artifactId> 
      <version>1.0.0.CR3</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.weld</groupId> 
      <artifactId>weld-core</artifactId> 
      <version>1.1.5.Final</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.6.4</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 
    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>org.jboss.arquillian</groupId> 
       <artifactId>arquillian-bom</artifactId> 
       <version>1.1.8.Final</version> 
       <scope>import</scope> 
       <type>pom</type> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

</project> 

这可能是我有一些依赖,我不需要。由于我没有经验,我必须诚实地承认,我非常绝望并且寻找任何可能的答案,并且在那个过程中我添加了一些根本不可用的依赖关系。

这是应该做的EntityManager

package ~path.examples.service; 

import ~path.examples.testjpa.domain.Person; 

import javax.persistence.*; 

/** 
* Created by ME on 2015-04-22. 
*/ 
public class JpaTest { 
    public static void main(String args[]) { 
     EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jpaTest"); 
     EntityManager em = entityManagerFactory.createEntityManager(); 
     EntityTransaction userTransaction = em.getTransaction(); 

     userTransaction.begin(); 
     Person person = new Person(); 
     person.setFirstName("Charles"); 
     person.setSurname("Dickens"); 
     em.persist(person); 
     userTransaction.commit(); 
     em.close(); 
     entityManagerFactory.close(); 
    } 
} 

而且类:

  1. Im相当肯定,所有的文件都在合适的位置,我也有一些问题,我,但我似乎已经消除了这个问题(其他错误比以前弹出:) :)

  2. 这可能是显而易见的,我错过了,在此先感谢f或任何帮助!

编辑:这很可能是问题在于persistance.xml文件,所以在这里(谢谢指出它)。该文件的位置为src /主/资源/ META-INF

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" 
      xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="JpaTest" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>~path.examples.testjpa.domain.Person</class> 
     <properties> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.format_sql" value="true" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 
     </properties> 

    </persistence-unit> 
</persistence> 
+1

你有一个persistence.xml文件吗? – Vyncent

+0

并假设是:在哪里? “我很确定”不是隐藏细节的理由,因为您犯了一个错误的选项仍然非常多。你自己这么说。 – Gimby

+0

是的,当然我有,我打算发布它。编辑,谢谢指出,只是忘了:) 顺便说一下,位置是正确的几乎肯定(我必须承认我试验了一点,在任何其他地方它甚至不会被检测到),但它很可能是文件内有一个错误,我没有看到。 –

回答

0

你需要改变:

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

到:

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

我很抱歉地说,但显然你错了。我只通过改变 <持久性单元名称=“JpaTest”交易类型=“RESOURCE_LOCAL”> 到 <持久性单元名称=“jpaTest”交易类型=“RESOURCE_LOCAL”>消除了误差((显然简单拼写错误)) 其中删除了以前的错误,但发了新错误 “应用程序必须提供JDBC连接” 在行 userTransaction。开始(); 当我试着做你说的,它让我退后一步到以前的错误:) 谢谢你尝试,但我现在将欣赏帮助新的 –

+0

是吗? [这个怎么样](http://stackoverflow.com/questions/22691252/error-deprecated-persistenceprovider-use-hibernatepersistenceprovider-teady)? –

+0

我远非试图贬低你的帮助,因为这是非常受欢迎的,显然你对这个话题的了解比我多得多。我只是在说会发生什么。做你的建议让我退后一步,纠正错误,我通过纠正拼写错误。 –

1

也许你没有添加休眠罐子到项目类路径?缺少提供程序jar(在本例中为Hibernate)不会显示编译错误,因为它们在运行时期间是必需的。

+1

我正在使用maven,并添加了依赖关系。现在我刚刚证实所有的罐子都在它的位置上。 –

相关问题