Сохранение UUID в PostgreSQL с использованием JPA

Я пытаюсь сохранить объект в PostgreSQL, который использует UUID в качестве первичного ключа. Я пытался сохранить его как обычный UUID:

@Id
@Column(name = "customer_id")
private UUID id;

С вышеизложенным я получаю эту ошибку:

ERROR: column "customer_id" is of type uuid but expression is of type bytea
Hint: You will need to rewrite or cast the expression.
Position: 137

Я также пытался сохранить UUID как byte[] безрезультатно:

@Transient
private UUID id;

@Id
@Column(name = "customer_id")
@Access(AccessType.PROPERTY)
@Lob
protected byte[] getRowId() {
    return id.toString().getBytes();
}

protected void setRowId(byte[] rowId) {
    id = UUID.fromString(new String(rowId));
}

Если я удалю @Lob, я получу ту же ошибку, что и выше. Но с применением @Lob ошибка немного меняется на:

ERROR: column "customer_id" is of type uuid but expression is of type bigint
Hint: You will need to rewrite or cast the expression.
Position: 137

Я чувствую себя очень плохо, потому что не могу сделать что-то настолько простое, как это!

Я использую Hibernate 4.1.3.Final с PostgreSQL 9.1.

Я видел множество вопросов на SO более или менее с одной и той же проблемой, но все они старые, и ни один из них, похоже, не имеет прямого ответа.

Я хотел бы добиться этого стандартным способом, не прибегая к уродливым хакам. Но если этого можно добиться только с помощью (уродливых )хаков, то, может быть, я так и поступлю. Однако я не хочу хранить UUID как varchar в базе данных, так как это не очень хорошо для производительности. Кроме того, я бы не хотел, если это возможно, вводить в свой код зависимость от Hibernate.

Любая помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ 1(2012 -07 -03 12 :15 вечера)

Ну-ну-ну... Довольно интересно, что я протестировал точно такой же код (простой UUID, без преобразования --первую версию кода, опубликованного выше )с SQL Server 2008 R2 с использованием драйвера JTDS (v1.2.5 )и, угадайте что, это сработало как шарм (конечно, мне пришлось изменить информацию о подключении -в файле persistence.xml ).

Теперь, это конкретная проблема PostgreSQL -или что?

25
задан ehsanullahjan 3 July 2012 в 04:16
поделиться