Usando UUID con EclipseLink y PostgreSQL
Quiero usar el tipo de uuid de PostgreSQL para las claves primarias de los objetos. Para eso he creado un convertidor (implementando la interfaz del convertidor). A continuación se muestra el código correspondiente:
@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(Types.OTHER);
field.setTypeName("uuid");
field.setColumnDefinition("UUID");
}
Luego he anotado la entidad relevante X con las siguientes anotaciones:
@Converter(name="uuidConverter",converterCalss=UUIDConverter.class)
@Convert("uuidConverter")
@Id
public UUID getId()
{
return id;
}
El problema es que tengo otra clase (Y) que tiene la siguiente definición:
@ManyToOne(targetEntity = X.class)
@JoinColumn(name = "x_id")
public X getX();
Aunque EclipseLink creó las tablas como se esperaba, envía una cadena a la base de datos cuando intenta insertar objetos de tipo Y. Postgres devuelve el siguiente mensaje de error:
column "id" is of type uuid but expression is of type character varying at character
Cualquier solución / trabajo será apreciado.