将 Eclipselink 实体移动到单独的 jar

Moving Eclipselink Entities to separate jar

我有一个正在运行的 Java EE 应用程序托管在 JBoss 上。它使用 EclipseLink 来管理 Postgres 数据库中的数据。我现在将实体 classes 移动到一个单独的 jar 中,以便它们可以被其他组件共享。这样做之后,Postgres 给出了以下错误:

ERROR:  operator does not exist: uuid = bytea at character 209
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

我的转换器 class 似乎没有被调用。这是我的转换器 class 的样子:

package model.util;

import org.eclipse.persistence.mappings.DatabaseMapping;
import org.eclipse.persistence.mappings.converters.Converter;
import org.eclipse.persistence.sessions.Session;

import java.sql.Types;
import java.util.UUID;

public class PgUuidConverter
        implements Converter
{
    @Override
    public boolean isMutable ()
    {
        return false;
    }
    @Override
    public Object convertDataValueToObjectValue (Object value, Session session)
    {
        return (UUID) value;
    }
    @Override
    public Object convertObjectValueToDataValue (Object value, Session session)
    {
        return (UUID) value;
    }
    @Override
    public void initialize (DatabaseMapping mapping, Session session)
    {
        mapping.getField ().setSqlType (Types.OTHER);
    }
}

下面是我在我的实体中使用它的方式:

package model;

import model.util.PgUuidConverter;
import org.eclipse.persistence.annotations.Convert;
import org.eclipse.persistence.annotations.Converter;

import java.util.UUID;
import javax.persistence.*;

@Entity
@Table (
    name           = "item",
    schema         = "main"
)
@Converter (
    name           = "uuid",
    converterClass = PgUuidConverter.class
)
public class Item
{
    public Item () {}

    @Id
    @Column (
        name     = "item_id",
        unique   = true,
        nullable = false
    )
    private UUID      itemId;
    @Column (name = "layer_id")
    @Convert ("uuid")
    private UUID      layerId;

    public UUID getItemId ()
    {
        return this.itemId;
    }

    public UUID getLayerId ()
    {
        return this.layerId;
    }

    public void setItemId (UUID itemId)
    {
        this.itemId = itemId;
    }

    public void setLayerId (UUID layerId)
    {
        this.layerId = layerId;
    }
}

是否缺少某种配置?

看来这个问题现在很明显了。我需要将 Convert 注释应用于所有 UUID 字段。

之前我只将 Convert 注释应用于可为空的 UUID 字段,因为 Postgres 仅在 UUID 字段设置为 NULL 时给我类型错误。现在 Postgres 正在为所有没有 Convert 注释的 UUID 字段抛出异常。