web-dev-qa-db-ja.com

要素「永続性」の宣言が見つかりません

エラーが発生する前はファイルが見つからなかったため、Eclipseのプロジェクトのクラスパスにpersistence.xmlを配置しました。今このエラーを与えます:

原因:javax.persistence.PersistenceException:無効なpersistence.xml。 XMLの解析エラー[行:-1、列:-1]:cvc-elt.1:要素 'persistence'の宣言が見つかりません

<persistence xmlns="http://Java.Sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1"
             xsi:schemalocation="http://Java.Sun.com/xml/ns/persistence
                                 http://Java.Sun.com/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="default" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
            <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/Automoveis" />
            <property name="javax.persistence.jdbc.user" value="postgres" />
            <property name="javax.persistence.jdbc.password" value="1234" />
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.jdbc.Driver" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>
    </persistence-unit>
</persistence>
14
csf

問題は、JPA2.0とJPA2.1の表記を混在させることです。

これのどちらか

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
                                 http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
  version="2.1">

jPA2.1またはこれの場合

<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">

jPA 2の場合ですが、それらの組み合わせではありません。

詳細については、 http://www.Oracle.com/webfolder/technetwork/jsc/xml/ns/persistence/index.html を参照してください。

38
Marcel Stör

提供されたXMLに少し問題があります。おそらく、バージョンが欠落している、おそらくXML定義です。奇妙なキャラクターやどこかのタイプミスかもしれません。

動作するテンプレートを以下に示します。代わりに試してください。

<?xml version="1.0" encoding="UTF-8"?>
<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> 
3
Oliver Shaw

過去に、JPAバージョン2.0のpersistence.xmlとバージョン2.1のorm.xmlファイルがあったときに、同様の問題(要素「entity-mappings」の宣言が見つかりません)に直面しました。上記で報告されたエラーも同様だと思います。

JPA 2の作業サンプル。以下のサンプルを注意深く読み、バージョンをメモしてください。それらがサンプルと同じバージョンであることを確認してください。 JPA2.1およびappropriteスキーマリファレンスも使用できます。

persistence.xml

<persistence version="2.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_2_0.xsd">
    <persistence-unit name="SANJUSEJB" transaction-type="JTA">
        <jta-data-source>jdbc/sanjusDataSourceXA</jta-data-source>
        <mapping-file>META-INF/orm.xml</mapping-file>
        <class>org.sanjus.pa.ejb.entity.UserEntity</class>
    </persistence-unit>
</persistence>

orm.xml

<entity-mappings xmlns="http://Java.Sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://Java.Sun.com/xml/ns/persistence/orm orm_2_0.xsd" version="2.0">
    <named-query name="findUserJSONById">
        <query>SELECT a.userJson FROM UserEntity a WHERE a.userId = :userId</query>
    </named-query>
</entity-mappings>