Предварительная установка PersistenceUnit [h2] завершилась неудачно с UUID?Класс: [uuid] не был найден при преобразовании имен классов в классы - PullRequest
0 голосов
/ 28 сентября 2018

Когда я пытаюсь сохранить свою сущность, я получаю следующее исключение: Исключение в потоке "main" javax.persistence.PersistenceException: Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.7.3.v20180807-4be1041): org.eclipse.persistence.exceptions.EntityManagerSetupException

Исключения времени выполнения:

Исключение Описание: Сбой развертывания PersistenceUnit [h2].Закройте все фабрики для этого PersistenceUnit.

Внутреннее исключение: исключение [EclipseLink-0] (Eclipse Persistence Services - 2.7.3.v20180807-4be1041): org.eclipse.persistence.exceptions.IntegrityException Exception [EclipseLink-7198] (Eclipse Persistence Services - 2.7.3.v20180807-4be1041): org.eclipse.persistence.exceptions.ValidationException Descriptor Исключения:

Исключение Описание: Класс: [uuid] не был найден при преобразовании имен классов вклассы.

Внутреннее исключение: java.lang.ClassNotFoundException: uuid

Сущность

@Entity
@UuidGenerator(name = "uuid")
@Converter(name = "uuidConverter", converterClass = UUIDConverter.class)
@Table(name = "ELECTRIC_METERS")
@NamedQuery(name = "ElectricMeters.findElectricMetersByNote", 
        query = "SELECT e FROM ElectricMeters e WHERE e.note = :note")
public class ElectricMeters implements Serializable{

    @Id
    @GeneratedValue(generator = "uuid", strategy = IDENTITY)
    @Convert("uuidConverter")
    @Column (name = "ID")
    private UUID id;

    @Column(name = "ADD_YARD_LIGHTING")
    private boolean addYardLighting;

    @Column(name = "NOTE")
    private String note;

    public ElectricMeters() {
    }
//getters setters
}

persistence.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="h2" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <!-- Converter -->
        <class>com.art.forestbucha.util.UUIDConverter</class>

        <class>com.art.forestbucha.entity.ElectricMeters</class>

        <properties>
          <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
          <property name="javax.persistence.jdbc.url" value="jdbc:h2:file://home/artem/NetBeansProjects/ForestBuchaBackEnd/src/main/resources/db/bucha"/>

          <property name="javax.persistence.jdbc.user" value="sa"/>
          <property name="javax.persistence.jdbc.password" value=""/>
        </properties>
      </persistence-unit>
    </persistence>

Конвертер

import java.util.UUID;
import org.eclipse.persistence.internal.helper.DatabaseField; 
import org.eclipse.persistence.mappings.DatabaseMapping; 
import org.eclipse.persistence.mappings.DirectCollectionMapping; 
import org.eclipse.persistence.mappings.converters.Converter; 
import org.eclipse.persistence.sessions.Session;


public class UUIDConverter implements Converter{

    @Override
    public Object convertObjectValueToDataValue(Object objectValue, 
            Session session) { 
        return (UUID) objectValue;
    } 

    @Override 
    public UUID convertDataValueToObjectValue(Object dataValue, 
            Session session) { 
        return (UUID) dataValue; 
    } 

    @Override 
    public boolean isMutable() { 
        return true; 
    } 

    @Override 
    public void initialize(DatabaseMapping mapping, Session session) { 
        final DatabaseField field; 
        if (mapping instanceof DirectCollectionMapping) { 
            // handle @ElementCollection... 
            field = ((DirectCollectionMapping) mapping).getDirectField(); 
        } else { 
            field = mapping.getField(); 
        } 

        field.setSqlType(java.sql.Types.OTHER); 
        field.setTypeName("uuid"); 
        field.setColumnDefinition("UUID"); 
    }
}

создать базу данных:

CREATE TABLE PUBLIC.ELECTRIC_METERS
(ID UUID NOT NULL PRIMARY KEY,
ADD_YARD_LIGHTING BOOLEAN DEFAULT false NOT NULL,
NOTE VARCHAR(255));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...