2013-05-20 10 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; 
    } 

} 

私の私のテスター私はクラスorg.hibernate.ejb.Hibernat ePersistenceがクラスパスから欠落していると思います(メイン)クラス

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を押してクラス名を入力します。リストに表示されない場合は、クラスパス上にないことがわかります。 – JamesB

答えて

5

3.6.10.FinalをHibernateの適切なバージョンに置き換えてください。

+0

完全には修正されていませんが、エラーメッセージが消えて、スレッド "main" java.lang.NoClassDefFoundError:org/slf4j/LoggerFactoryのExceptionという新しいエラーメッセージが表示されます。しかし、今私はそれが働くようになる方法を知っていると思う –

+0

あなたはあまりにもslf4jが不足しているように見えます。 – JamesB

+0

注:persistence.xmlの変更を反映するために、クラスを新しいパッケージに移動した後にこの例外が発生しました。 –

0

私は同じ問題がありました。多くの検索の後、私は解決策がちょうどeclipseマーケットプレイスHiberObjectsからインストールすることであることを発見しました。

関連する問題