Сохранение 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 как байт [] безрезультатно:

@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. Наконец, с PostgreSQL 9.1.

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

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

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

UPDATE 1 (2012-07-03 12:15 вечера)

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

Теперь это проблема PostgreSQL или как?

Ответы на вопрос(7)

Ваш ответ на вопрос