我正在尝试使用没有@Id注释的生成的UUID,因为我的主键是其他东西。该应用程序不会生成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。
答案 0 :(得分:8)
试试这可能会有所帮助
@Id
@GeneratedValue(generator = "hibernate-uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "uuid", unique = true)
private String uuid;
阅读此link读取hibernate文件是可能的
答案 1 :(得分:6)
检查GeneratedValue
:
提供主键值的生成策略规范。
换句话说 - 只有一个注释才能初始化'none ID'属性。
但您可以使用@PrePersist
:
@PrePersist
public void initializeUUID() {
if (uuid == null) {
uuid = UUID.randomUUID().toString();
}
}
答案 2 :(得分:2)
这不是因为您的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