9
public class LoginTest {

public static void main(String[] args) {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("IRCBotPU");
    EntityManager em = emf.createEntityManager();

    em.getTransaction().begin();

    Login lg = new Login();
    lg.setPassword("password");
    lg.setUserName("Rocky");

    em.persist(lg);
    em.flush();

    Login st = em.find(Login.class, lg.getPassword());
    System.out.println(st);

    em.getTransaction().commit();

    em.close();
    emf.close();

}
}

このクラスを実行しようとすると例外が発生します

javax.persistence.PersistenceException: No Persistence provider for EntityManager named IRCBotPU:  
   No META-INF/persistence.xml was found in classpath.

META-INF/persistence.xml は私のクラスパスにあります。理由やこの例外が何であるかはわかりません。

永続ライブラリは TopLink です。

4

7 に答える 7

23

同じ問題がありました。persistence.xml ファイルを WebContent/META-INF ディレクトリに保持していましたが、jpa 仕様では次のように述べられています。
永続化ユニットのルートは WEB-INF/classes ディレクトリです。したがって、persistence.xml ファイルは WEB-INF/classes/META-INF ディレクトリに含まれています。persistence.xml
を src/META-INF の下に配置してみてください。

于 2010-03-11T00:47:43.827 に答える
3

IntelliJまたはMavenプロジェクト構造を使用している場合は、"META-INF/persistence.xml"ファイル全体をリソース(src/resources)フォルダーに配置して、persistence.xmlファイルを"WEB-INF/classes/persistence.xml"場所に移動する必要があります。

あなたが使用している場合、eclipseまたは他の何かがそれに応じて変更を加えて、ファイルを移動しますWEB-INF/classes/persistence.xml

他に何もうまくいきませんでした。

于 2016-04-04T21:52:16.180 に答える
2

エラーはやや誤解を招くものです。XML ファイル自体をクラスパスに含めないでください。「META-INF/persistence.xml」というメッセージの部分は、META-INF/persistence.xml を含むディレクトリがあるべきであることを意味します。

ハードドライブに次のものがあった場合

C:\libs\JPA\META-INF\Persistence.xml

次に、クラスパスにこれを含める必要があります

CLASSPATH=c:\libs\JPA

META-INF\Persistence.xml が foo.jar に含まれていた場合、META-INF/Persistence.xml が jar のルート フォルダーにあると仮定すると、クラスパスにはこれが含まれている必要があります。

CLASSPATH=C:\<path to jar>\foo.jar

これは明白または冗長に思えるかもしれませんが、私の目標は、リンゴとリンゴを比較していることを確認することであり、CLASSPATH は、クラスローディングとともに、対処するバグになる可能性があります。

それで、あなたのCLASSPATHを投稿できますか?

于 2009-08-14T20:08:57.917 に答える
1

私はWebアプリケーションを持っており、以下はうまくいきました。私がしたことは、persistence.xmlを含むMETA-INFディレクトリをsrc/main/resourcesの場所に追加することでした[Mavenプロジェクト]

于 2012-03-06T08:15:41.767 に答える
1

persistence.xmlクラスパスに含めないでください。persistence.xmlその META-INF フォルダに含まれる JAR ファイルが必要です。

于 2009-08-14T17:27:59.723 に答える
0

META-INF/persistence.xml ファイルは次のようになります。

// <persistence>
//   <persistence-unit name="IRCBotPU">
//     <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
//     <!-- All persistence classes must be listed -->
//     <class>entity.Customer</class>
//     <class>entity.Order</class>
//     <class>entity.Item</class>
//     <properties>
//       <!-- Provider-specific connection properties -->
//       <property name="toplink.jdbc.driver" value="<database driver>"/>
//       <property name="toplink.jdbc.url" value="<database url>"/>
//       <property name="toplink.jdbc.user" value="<user>"/>
//       <property name="toplink.jdbc.password" value="<password>"/>
//       <!-- Provider-specific settings -->
//       <property name="toplink.logging.level" value="INFO"/>
//     </properties>
//   </persistence-unit>
// </persistence>

persistence.xml の persistence-unit の name 属性が、Persistence.createEntityManagerFactory メソッドに渡す値と一致しません。永続ユニット名が「IRCBotPU」に設定されていることを確認してください。

于 2009-08-14T17:49:00.477 に答える
0

src の下に META-INF というフォルダーを作成しましたが、動作します。"marcosbeirigo" さんが既に回答しています。ただし、そのpersistance.xmlをそこに配置する必要がある理由はわかりません。WebContent/META-INF の下に配置しましたが、動作しませんでした

于 2013-12-06T16:56:30.283 に答える