如何让hibernate不覆盖指定的UUID?

时间:2011-12-06 02:56:46

标签: hibernate uuid

我使用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?

2 个答案:

答案 0 :(得分:0)

看一下这篇文章:http://rajivrnair.github.io/custom-hibernate-uuid/

具体而言,如果已经为目标字段设置了UUID,则可以创建一个自定义UUID生成器来跳过生成。这很有用,尤其是在测试代码时。

答案 1 :(得分:-2)

为什么要使用setId()。你应该让Hibernate处理id,一切都是正确的。

如果你持久保存新的对象,Hibernate会设置id。