Подтвердить что ты не робот

Использование Hibernate UUIDGenerator через аннотации

Я использую свой uuid следующим образом:

@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;

но я получаю смарт-предупреждение Hibernate:

Использование org.hibernate.id.UUIDHexGenerator который не генерирует IETF RFC 4122 совместимые значения UUID; рассмотрите возможность использования org.hibernate.id.UUIDGenerator вместо

Итак, я хочу перейти на org.hibernate.id.UUIDGenerator, теперь мой вопрос в том, как мне рассказать об этом генератору Hibernate. Я видел, как какой-то парень использовал его как "hibernate-uuid" - так вот что я пробовал, но с отрицательным результатом:

@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "hibernate-uuid", strategy = "hibernate-uuid")
@Column(name = "uuid", unique = true)
private String uuid;
4b9b3361

Ответ 2

HibernateDoc говорит, что вы можете использовать следующее:

@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;

Надеюсь, вы используете Hibernate 3.5.

Ответ 3

Try...

@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(name = "uuid", columnDefinition = "BINARY(16)")
public UUID getId()
{
    return id;
}

public void setId(UUID i)
{
    id = i;
}

Обратите внимание на "uuid2", а не на "uuid".

Ответ 4

Неизвестный идентификатор: hibernate-uuid

@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator")
@Column(name = "id", unique = true)
public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

Ответ 5

Как отметил @natan в комментарии, если вы используете Hibernate 5, то приведенного ниже кода достаточно:

@Id 
@GeneratedValue
private java.util.UUID id;

Определите столбец id с типом BINARY(16) в MySQL или его эквивалентом в других реализациях SQL.

Ответ 6

@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid")
@Column(name = "UUID_ID")
public String getId(){
return id;
}

Это правильный способ использовать аннотацию для генераторов uuid в Hibernate 5.0.11.FINAL.

Примечание: IT устарела.

Ответ 7

При этом будет использоваться UUID v4, и автоматически сгенерированный uuid будет сохранен в столбце как обычный varchar(36):

@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(length = 36)
private String uuid;

Это должно оказать некоторое влияние на производительность: * потребляемый размер больше, чем BINARY(16) * после гидратации экземпляр java.lang.String потребляет больше памяти, чем java.util.UUID

Но намного проще работать со строковым UUID - проще писать запросы, и вы можете видеть содержимое таблицы.

Протестировано на Hibernate 5.3