オブジェクトの主キーにPostgreSQLuuidタイプを使用したい。そのために、コンバーターを作成しました(コンバーターインターフェイスを実装します)。以下は関連するコードです:
@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");
}
次に、関連するエンティティXに次の注釈を付けました。
@Converter(name="uuidConverter",converterCalss=UUIDConverter.class)
@Convert("uuidConverter")
@Id
public UUID getId()
{
return id;
}
問題は、次の定義を持つ別のクラス(Y)があることです。
@ManyToOne(targetEntity = X.class)
@JoinColumn(name = "x_id")
public X getX();
EclipseLinkは期待どおりにテーブルを作成しましたが、タイプYのオブジェクトを挿入しようとすると、データベースに文字列を送信します。Postgresは次のエラーメッセージを返します。
column "id" is of type uuid but expression is of type character varying at character
任意の解決策/回避策をいただければ幸いです。