我使用uuid主键定义了一个实体:
@Entity
@Table(name = "SITES")
public class Site extends Model {
@Id
@Column(length = 32)
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
private String id;
}
它工作正常,但我发现hibernate将始终覆盖指定的id:
当我使用指定的uuid Site
保存402881e533fe2de70133fe2df6790000
对象时,如:
Site site = new Site();
site.setId("402881e533fe2de70133fe2df6790000");
siteDao.save(site);
打印ID:
System.out.println(site.id);
得到:
402881e534110dc30134110dd4e80000
有没有办法让hibernate不覆盖我指定的uuid?
答案 0 :(得分:0)
看一下这篇文章:http://rajivrnair.github.io/custom-hibernate-uuid/
具体而言,如果已经为目标字段设置了UUID,则可以创建一个自定义UUID生成器来跳过生成。这很有用,尤其是在测试代码时。
答案 1 :(得分:-2)
为什么要使用setId()。你应该让Hibernate处理id,一切都是正确的。
如果你持久保存新的对象,Hibernate会设置id。