我遇到需要保存休眠对象的情况,但是我不确定是否可以通过调用app(使用范围内的特殊逻辑-唯一)来分配ID。
如果未分配ID,我需要休眠以生成一个ID,该ID高于应用程序可能输入的ID范围(我知道范围)。其他应该使用应用程序输入。
我正在使用MySQL-检查是否可以自定义生成器,如下所示
public class MyDOIdGenerator extends IdentityGenerator{
@Override
public Serializable generate(SessionImplementor session, Object obj) throws HibernateException {
if ((((MyDO) obj).getId()) == null) {
Serializable id = super.generate(session, obj) ;
return id;
} else {
return ((MyDO) obj).getId();
}
}
}
但是我的问题是,我不知道super.generate在集群环境中的行为。它会在服务器之间保持ID同步吗?如何指定起始编号? (因为我需要在休眠生成应用时使用ID范围排除该应用)
请帮忙
谢谢
最佳答案
在数据库中,将您的序列设置为以一个特定的数字开头(从您提到的范围开始),然后对ID注释使用类似的内容,这将确保休眠状态将使用序列中的下一个ID,并且您不会担心群集/非群集环境问题:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;