Ответ 1
Он должен быть uuid2
:
...
@GenericGenerator(name = "uuid", strategy = "uuid2")
...
Я использую свой 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;
Он должен быть uuid2
:
...
@GenericGenerator(name = "uuid", strategy = "uuid2")
...
HibernateDoc говорит, что вы можете использовать следующее:
@Id
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
@Column(name = "uuid", unique = true)
private String uuid;
Надеюсь, вы используете Hibernate 3.5.
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".
Неизвестный идентификатор: 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;
}
Как отметил @natan в комментарии, если вы используете Hibernate 5, то приведенного ниже кода достаточно:
@Id
@GeneratedValue
private java.util.UUID id;
Определите столбец id
с типом BINARY(16)
в MySQL или его эквивалентом в других реализациях SQL.
@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 устарела.
При этом будет использоваться 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