Używanie UUID z EclipseLink i PostgreSQL
Chcę użyć typu uuid PostgreSQL dla kluczy podstawowych obiektów. W tym celu stworzyłem konwerter (implementujący interfejs konwertera). Poniżej znajduje się odpowiedni kod:
@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");
}
Następnie opatrzyłem adnotacją odpowiedni element X z poniższymi adnotacjami:
@Converter(name="uuidConverter",converterCalss=UUIDConverter.class)
@Convert("uuidConverter")
@Id
public UUID getId()
{
return id;
}
Problem polega na tym, że mam inną klasę (Y), która ma następującą definicję:
@ManyToOne(targetEntity = X.class)
@JoinColumn(name = "x_id")
public X getX();
Chociaż EclipseLink stworzył tabele zgodnie z oczekiwaniami, wysyła ciąg do bazy danych podczas próby wstawienia obiektów typu Y. Postgres zwraca następujący komunikat o błędzie:
column "id" is of type uuid but expression is of type character varying at character
Wszelkie rozwiązania / praca będą mile widziane.