it-notepad.com

Java Persistence Jakarta EE

JPA Jakarta EE

В предыдущем посте мы вскольз упоминали про JPA и Java EE. Мне прислали несколько вопрос про ошибки с JPA при апгрейде проекта. Суть довольно проста. Проект собирается и развёртывается без ошибок, но при обращении к БД получаем следующие ошибки

jakarta.persistence.PersistenceException: Unable to locate persistence units

Caused by: jakarta.persistence.PersistenceException: Invalid persistence.xml.
Error parsing XML [line : -1, column : -1] : cvc-elt.1.a: Cannot find the declaration of element ‘persistence’.

org.glassfish.jersey.server.ContainerException: java.util.concurrent.ExecutionException: jakarta.persistence.PersistenceException: Unable to locate persistence units

Caused by: java.util.concurrent.ExecutionException: jakarta.persistence.PersistenceException: Unable to locate persistence units

Что ж, давайте разберем этот вопрос более детально. Мы имеем рабочий в версии Java EE 7 файл описание подключения к БД web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" 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">
  <persistence-unit name="itnotepadsql" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>com.itnotepad.MainPersistence</class>
    <class>com.itnotepad.ReciterModel</class> 
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/itnotepad"/>
      <property name="javax.persistence.jdbc.user" value="username"/>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.password" value="somethingpassword"/>
    </properties>
  </persistence-unit>
</persistence>

Теперь мы немного изменим xml в соответствии с обновленным пространством имен:

 

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="3.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd">
    <persistence-unit name="itnotepadsql" transaction-type="RESOURCE_LOCAL">
        <class>com.itnotepad.MainPersistence</class>
        <class>com.itnotepad.ReciterModel</class> 
        <properties>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/itnotepad"/>
            <property name="jakarta.persistence.jdbc.password" value="somethingpassword"/>
            <property name="jakarta.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="jakarta.persistence.jdbc.user" value="username"/>
        </properties>
    </persistence-unit>
</persistence>

И перед сборкой смотрим на обновленный список зависимостей:

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>8.0.13</version>
</dependency>
<dependency>
   <groupId>jakarta.persistence</groupId>
   <artifactId>jakarta.persistence-api</artifactId>
   <version>3.1.0</version>
</dependency>
<dependency>
   <groupId>jakarta.transaction</groupId>
   <artifactId>jakarta.transaction-api</artifactId>
   <version>2.0.1</version>
</dependency>
<dependency>
   <groupId>org.eclipse.persistence</groupId>
   <artifactId>org.eclipse.persistence.jpa</artifactId>
   <version>3.0.1</version>
</dependency>

Exit mobile version