0
我有一个JBoss上托管工作的Java EE应用程序。它使用EclipseLink来管理Postgres数据库中的数据。我现在将实体类移动到单独的jar中,以便它们可以被其他组件共享。这样做后,Postgres给出以下错误:移动的EclipseLink实体到单独的jar
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.
它看起来像我的转换器类没有被调用。这里是我的转换器类的样子:
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;
}
}
是否有某种配置的我失踪?
奇怪的是,这会停止工作,并且您对layerId的转换器,但不是你的itemId。那是什么导致了错误的SQL?打开EclipseLink的日志记录,以最优秀的和工作日志进行比较的不工作的情况下,如在部署过程中一些警告可能表明缺少什么。 – Chris
我加入转炉到的itemId,我停下得到错误。当我最初在不使用实体类的情况下在单独的jar中实现此代码时,只有在将UUID字段输入NULL时才需要转换器。因此,我只将转换器应用于可空的UUID字段。看起来EclispeLink现在需要在所有UUID字段中使用转换器。 –