Неизвестная версия JPA persistence.xml XSD: `` - hibernate, java ee и postgresql

Проблема возникает при попытке создать entityManager с помощью entitiManagerFactory. Приложение работает внутри контейнера докера, а база данных postgresql находится на локальном хосте машины (не внутри докера).

моя настойчивость.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
public List<SimplifiedUserGroup> findAll() {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("mypersistenceunit");
    entityManager = emf.createEntityManager();
    return entityManager.createNamedQuery("UserGroup.findAll", SimplifiedUserGroup.class).getResultList();
}
1.xsd" version="2.1"> <!-- Define persistence unit --> <persistence-unit name="mypersistenceunit"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <class>some.path.SimplifiedUserGroup</class> <class>some.path.UserSettings</class> <class>some.path.UserGroupSettings</class> <class>some.path.UserGroup</class> <class>some.path.AppUser</class> <properties> <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/localdatabase" /> <property name="javax.persistence.jdbc.user" value="postgres" /> <property name="javax.persistence.jdbc.password" value="postgres" /> </properties> </persistence-unit>

and the repository class:

public List<SimplifiedUserGroup> findAll() {
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("mypersistenceunit");
    entityManager = emf.createEntityManager();
    return entityManager.createNamedQuery("UserGroup.findAll", SimplifiedUserGroup.class).getResultList();
}

есть ошибка:

javax.persistence.PersistenceException: Unable to locate persistence units

а потом:

java.lang.IllegalArgumentException: Unrecognized JPA persistence.xml XSD version : ``

Я пробовал несколько руководств и читал темы stackoverflow, но мне ничего не помогает - я пытался, но не помог. То же самое с версиями 2.0, 2.1, 2.2. У меня есть такие зависимости в моем pom.xml:

dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.4.2.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.3.6.Final</version>
    </dependency>

Было бы здорово, если бы я мог создать entityManager, а затем подключиться к базе данных (на локальном хосте) и выполнить несколько запросов... Спасибо!


person Piotr    schedule 07.08.2019    source источник


Ответы (1)


Исключение PersistenceException :

Если вы используете EntityManagerFactory в среде JavaEE, вам необходимо определить тип транзакции как RESOURCE_LOCAL в файле persistence.xml:

<persistence-unit name="mypersistenceunit" transaction-type="RESOURCE_LOCAL">

Для получения дополнительной информации о EntityManager и различиях между типами транзакций JTA и RESOURCE_LOCAL в persistence.xml см. этот ответ.


Нераспознанная версия JPA persistence.xml XSD:

В вашем persistence.xml:

  1. Я не вижу закрывающий тег persistence </persistence> после </persistence-unit> в конце.
  2. Вы используете старый URL для Расположения схемы XSD, измените <persistence ... > на:
<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">

Информация от Oracle :

Начиная с версии 2.1, схемы Java Persistence API имеют общее пространство имен http://xmlns.jcp.org/xml/ns/persistence/. Предыдущие версии использовали пространство имен http://java.sun.com/xml/ns/persistence/.

person CoYoT3    schedule 10.02.2020