2013-05-20 78 views
7

我试图按照我的教师文档提供的信息设置一个简单的jpa 2.0项目。我已经在这个几个小时了,但不管我做什么,当我尝试创建一个EntityManagerFactory时,我总是得到这个异常: 我发现了很多关于这个异常的类似问题,但没有解决方案,我可以去上班。我在这里做错了什么?javax.persistence.PersistenceException:否EntityManager的持久性提供者名为

我创造了这个项目在Eclipse(没有命令提示符)

Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named course 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:56) 
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34) 
    at message.SaveMessage.main(SaveMessage.java:8) 

目录结构

enter image description here

的persistence.xml

<persistence 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" 
    version="2.0"> 
    <persistence-unit name="course" transaction-type="RESOURCE_LOCAL"> 

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


     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 

      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/StudentDB" /> 
      <property name="javax.persistence.jdbc.user" value="root" /> 
      <property name="javax.persistence.jdbc.password" value="pasapas2005" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

我班

package message; 

import java.io.Serializable; 

import javax.persistence.*; 

@Entity 
public class Message implements Serializable { 

    private long id; 
    private String text; 

    public Message() { 

    } 

    public Message(long id, String text) { 
     this.setId(id); 
     this.setText(text); 

    } 

    @Id 
    public long getId() { 
     return id; 
    } 

    public void setId(long id) { 
     this.id = id; 
    } 

    public String getText() { 
     return text; 
    } 

    public void setText(String text) { 
     this.text = text; 
    } 

} 

我我的测试车(主)类

package message; 

import javax.persistence.*; 

public class SaveMessage { 

    public static void main(String[] args) { 
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("course"); 
     EntityManager em = emf.createEntityManager(); 
     EntityTransaction tx = em.getTransaction(); 
     tx.begin(); 

     Message message = new Message(1, "Hello world"); 
     em.persist(message); 
     tx.commit(); 
     em.close(); 
     System.out.println("message saved"); 

    } 

} 
+0

检查类org.hibernate.ejb.Hibernat ePersistence是否在您的类路径中。 – JamesB

+0

谢谢你的回复。我的问题听起来很愚蠢,但我如何检查我的类路径? –

+0

在eclipse中,打开项目,按Ctrl + Shift + T并开始输入类名。如果它没有出现在列表中,则知道它不在classpath中。 – JamesB

回答

5

我认为类org.hibernate.ejb.Hibernat ePersistence从classpath中失踪。将其添加到您的pom.xml中:

<dependency> 
<groupId>org.hibernate</groupId> 
<artifactId>hibernate-entitymanager</artifactId> 
<version>3.6.10.Final</version> 
</dependency> 

将3.6.10.Final替换为相应版本的Hibernate。

+0

没有完全修复,但改变了错误信息已经离开的地方发生了一个新的错误消息,在线程“main”java.lang.NoClassDefFoundError:org/slf4j/LoggerFactory中说异常。但现在我想我知道如何让它起作用 –

+0

看起来你也错过了slf4j。 – JamesB

+0

注意:在将一个类移动到缺少新包以反映更改persistence.xml之后,我发生了此异常。 –

0

我有同样的问题。经过大量搜索后,我发现该解决方案仅仅是从eclipse marketplace安装HiberObjects的

相关问题