2013-05-20 4 views
7

Я пытаюсь создать простой проект jpa 2.0, следуя информации, предоставленной документацией моего преподавателя. Я занимаюсь этим уже несколько часов, но независимо от того, что я делаю, я всегда получаю это исключение, когда пытаюсь создать EntityManagerFactory: Я нашел довольно много похожих вопросов относительно этого исключения, но никаких решений, которые я могу добраться до работы. Что я здесь делаю неправильно?javax.persistence.PersistenceException: нет провайдера Persistence для 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 отсутствует на пути к классам. Добавьте его в свой pom.xml:

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

Замените 3.6.10.Final соответствующей версией Hibernate.

+0

Не полностью исправлено, но alteast сообщение об ошибке исчезло из-за нового сообщения об ошибке «Исключение из потока» main »java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory. Но теперь я думаю, что знаю, как заставить его работать. –

+0

Похоже, что вы тоже не хватает slf4j. – JamesB

+0

Примечание: У меня возникло это исключение после переноса класса на новый пакет, отсутствующий, чтобы отразить изменение persistence.xml. –

0

У меня была та же проблема. После многого поиска я обнаружил, что решение было просто установить с рынка затмения HiberObjects.

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