エラーが発生する前はファイルが見つからなかったため、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>
問題は、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 を参照してください。
提供された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>
過去に、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>