Как использовать UUID с Hibernate в качестве поля?
Я пытаюсь использовать сгенерированные UUID без @Id аннотации, потому что мой первичный ключ - это что-то еще. Приложение не генерирует UUID, есть ли у вас идея?
Это мое выражение:
@Column(name = "APP_UUID", unique = true)
@GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
private String uuid;
Я использую Hibernate 4.3.0 с Oracle10g.
Ответы
Ответ 1
попробуйте это, это может помочь
@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "uuid", unique = true)
private String uuid;
читать эту ссылку читать hibernate документы можно
Ответ 2
Проверьте Javadoc GeneratedValue
:
Обеспечивает спецификацию стратегий генерации для значений первичных ключей.
Другими словами - невозможно только с аннотацией инициализировать атрибут "none ID".
Но вы можете использовать @PrePersist
:
@PrePersist
public void initializeUUID() {
if (uuid == null) {
uuid = UUID.randomUUID().toString();
}
}
Ответ 3
Это не потому, что ваш UUID является первичным ключом, который обязателен для его записи с помощью @GeneratedValue
.
Например, вы можете сделать что-то вроде этого:
public class MyClass
{
@Id
private String uuid;
public MyClass() {}
public MyClass (String uuid) {
this.uuid = uuid;
}
}
И в своем приложении сгенерируйте UUID перед сохранением вашего объекта:
String uuid = UUID.randomUUID().toString();
em.persist(new MyClass(uuid)); // em : entity manager