Postgres + Hibernate + Java UUID - PullRequest
       11

Postgres + Hibernate + Java UUID

9 голосов
/ 17 апреля 2009

Я хочу использовать собственный тип UUID PostgreSQL с UUID Java. Я использую Hibernate в качестве поставщика JPA и ORM. Если я пытаюсь сохранить его напрямую, он просто сохраняется в Postgres как байта.

Как я могу это сделать?

Ответы [ 6 ]

9 голосов
/ 23 апреля 2009

Попробуйте использовать последнюю версию драйвера JDBC (в настоящее время 8.4dev-700) или дождитесь следующей версии. (Отредактировано, чтобы добавить: 8.4-701 был выпущен)

В примечаниях к выпуску упоминается это изменение:

Сопоставить тип базы данных uuid с java.util.UUID. Это работает только для относительно новых версий сервера (8.3) и JDK (1.5).

4 голосов
/ 23 ноября 2011

Вот репост моего ответа на Postgresql UUID, поддерживаемый Hibernate? ... Я знаю, что этот вопрос старый, но если кто-то наткнется на него, это поможет им.

Эту проблему можно решить, добавив следующую аннотацию к UUID:

import org.hibernate.annotations.Type;
...
@Type(type="pg-uuid")
private java.util.UUID itemUuid;

Что касается того, почему Hibernate не делает эту настройку по умолчанию, я не могу вам сказать ...

ОБНОВЛЕНИЕ : По-прежнему возникают проблемы с использованием метода createNativeQuery для открытия объектов с полями UUID. К счастью, метод createQuery до сих пор работал хорошо для меня.

0 голосов
/ 28 февраля 2018

Попробуйте это

@Column(name = "UUID", nullable=false, insertable = false, columnDefinition="uuid DEFAULT uuid_generate_v4()")
private String uuid;
0 голосов
/ 23 апреля 2009

Возможно, вы можете получить тип UUID для автоматического преобразования в строку (uuid.toString () должен давать каноническое представление из 36 символов)? БД обычно надежно преобразуют вещи между строками и нативными типами.

0 голосов
/ 21 апреля 2009

вы можете попробовать с:

 @Column(name="foo", columnDefinition="uuid") 

где columnDefinition является фрагментом собственного SQL

0 голосов
/ 17 апреля 2009

При использовании не JPA я бы создал UserType для форматирования UUID в виде строки, которую принимает PostgreSQL, а затем просто дал бы имя реализации UserType в качестве типа столбца.

...