genobis
8/30/2017 - 7:27 AM

Konwersja UUID w JPA

Konwersja UUID w JPA

package com.example.project;

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;

@SuppressWarnings("serial")
public class UUIDConverter implements Converter {

    @Override
    public Object convertObjectValueToDataValue(Object objectValue, Session session) {
        return 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) {
            field = ((DirectCollectionMapping) mapping).getDirectField();
        }
        else {
            field = mapping.getField();
        }

        field.setSqlType(java.sql.Types.OTHER);
        field.setTypeName(UUID.class.getCanonicalName());
        field.setColumnDefinition("UUID");
    }
}
package com.example.project;

import java.util.UUID;
import javax.persistence.Entity;
import org.eclipse.persistence.annotations.Convert;
import org.eclipse.persistence.annotations.Converter;

@Entity
public class Foo {
    //Whatever

    @Converter(name="uuidConverter", converterClass=UUIDConverter.class)
    @Convert("uuidConverter")
    private UUID uuid;

    //Whatever
}