我遇到需要保存休眠对象的情况,但是我不确定是否可以通过调用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;

09-30 15:25
查看更多