Сохранение 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 или как?