1

JPA を使用して最初のアプリを実行しようとしていますが、persistence.xml が見つからないことが問題のようです。

run:
 [java] Driver loaded successfull.
 [java] Got connection.
 [java] Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named books
 [java]     at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:84)
 [java]     at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
 [java]     at com.primaryAnalysis.Main.main(Unknown Source)
 [java] Java Result: 1

プロジェクト構造は同じです。

ソース
├──ジャワ
│ └──com
│ ├── ejb
│ │ └── 持続性
│ │ └── ejb3-persistence.jar
│ ├── mysql
│ │ └── jdbc
│ │ └── ドライバー
│ │ └── mysql-connector-java-5.1.24-bin.jar
│ └── 一次分析
│ ├── ...
└──資源
    └──メタINF
        └──persistence.xml

私のpersistence.xmlファイルは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
    <persistence-unit name="books" transaction-type="JTA">
            <provider>com.ejb.Persistence</provider>
            <class>com.primaryAnalysis.Book</class>
            <class>com.primaryAnalysis.Autor</class>
            <properties>
                    <property name="javax.persistence.jdbc.driver"   value="com.mysql.jdbc.Driver" />
                    <property name="javax.persistence.jdbc.url"      value="jdbc:mysql://localhost/books" />
                    <property name="javax.persistence.jdbc.user"     value="root" />
                    <property name="javax.persistence.jdbc.password" value="MyNewPass" />
                    <property name="toplink.ddl-generation"          value="create-tables" />
            </properties>
    </persistence-unit>
 </persistence>   

build.xmlのtaskdef リソースにリソースディレクトリへのパスがあります。

何か案は?

ありがとう。

4

2 に答える 2

2

このドキュメントによると、ファイルはプロジェクト jar のフォルダーpersistence.xmlにあるはずです。META-INFIDE プロジェクト構造で開発している場合はどこにあるかは問題ではありませんが、ビルド ツールはそれをMETA-INFjar の下に配置する必要があります。

アリあり(build.xml)

<copy todir="some_folder/temp">
    <fileset dir="src/resources" /> // copies everything under src/resources to some_folder/temp
</copy>

<jar jarfile="some_folder/bin/your_app.jar">
    <fileset dir="some_folder/temp" /> // put the folder from before in your jar
</jar>
于 2013-05-06T18:33:31.767 に答える
1
<provider>com.ejb.Persistence</provider>

ワット?

Google 検索テスト ( Google: "com.ejb.Persistence" ) によると、これは非常に特別な (まれな) ものです。

16 results

結果は次のとおりです。

1. <provider>com.ejb.Persistence</provider> - this question
2. <local>com.ejb.persistence.UserLocal</local> - some samples from india's guest at oracle forum
3. no exact match
4 - 9. search spam sites webwiki.com codeweblog.com ineedfile2.com webstatsdomain.com
10 - 16. "java-enterprise-app.developerfaqs.com.ejb.finder" at ejb.developerfaqs.com/

したがって、フォルダー「src/java/com/ejb/persistence/」に「com.ejb.Persistence」という名前の有効なプロバイダーがないことはほぼ確実です (注意、これは com.ejb.Persistence クラスの間違ったフォルダーです。 "com/ejb/Persistence.class" として縫う必要があります) または jar ファイルでejb3-persistence.jarmvnrepository.comからこのファイルのコピーを持っています。この jar の構造によると、javax.persistence.* クラスのみがあり、com.ejb.* クラスはありません。

eclipselink jpa プロバイダーに切り替えることができると思います ( http://www.eclipse.org/eclipselink/downloads/から「Installer Zip (37 MB)」をダウンロードし、「eclipselink/jlib/eclipselink.jar」から結合された jar を抽出します):

  <persistence-unit name="books" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
     <class>com.primaryAnalysis.Book</class>
     <class>com.primaryAnalysis.Autor</class>
    <properties>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/books"/>
      <property name="javax.persistence.jdbc.password" value="MyNewPass"/>
      <property name="javax.persistence.jdbc.user" value="root"/>
      <property name="eclipselink.ddl-generation" value="create-tables"/>
    </properties>
  </persistence-unit>
于 2013-05-08T00:19:54.083 に答える