Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改现有数据的休眠序列生成_Java_Oracle_Hibernate_Orm_Sequence - Fatal编程技术网

Java 更改现有数据的休眠序列生成

Java 更改现有数据的休眠序列生成,java,oracle,hibernate,orm,sequence,Java,Oracle,Hibernate,Orm,Sequence,我最近在尝试为我们的业务实体从标识列转换为基于序列的标识生成时遇到了这个问题。问题是,自从应用程序首次部署以来,我们一直在Oracle上使用hibernate_序列生成 因此,问题是:在现有生产数据库上将以下Hibernate参数设置为true而不破坏已经生成的ID安全吗 hibernate.id.new_generator_mappings=true 编辑: 描述更改与现有数据库不向后兼容 我们在数据库迁移中使用HIBERNATE_SEQUENCE.NEXTVAL,这显然是不安全的,因为NE

我最近在尝试为我们的业务实体从标识列转换为基于序列的标识生成时遇到了这个问题。问题是,自从应用程序首次部署以来,我们一直在Oracle上使用hibernate_序列生成

因此,问题是:在现有生产数据库上将以下Hibernate参数设置为true而不破坏已经生成的ID安全吗

hibernate.id.new_generator_mappings=true
编辑: 描述更改与现有数据库不向后兼容

我们在数据库迁移中使用HIBERNATE_SEQUENCE.NEXTVAL,这显然是不安全的,因为NEXTVAL可能与预先存在的id冲突


如果我没有大错特错的话,可以通过将HIBERNATE_序列的当前值设置为数据库中的最大id来获得向后兼容性。我说得对吗?有没有办法找到答案?

如果您想迁移到hibernate.id.new\u generator\u mappings=true,您必须做两件事:

将数据库序列的增量设置为与Hibernate中的allocationSize相同的值。默认的allocationSize为50。 设置hibernate.id.new_generator_mappings=true后,hibernate将生成以SEQ.NEXTVAL-allocationSize开头的值。因此,您必须使用分配大小来增加序列。这意味着选择一个SEQ.NEXTVAL。 以下是我在迁移之前运行的Oracle PL/SQL脚本:

  DECLARE
    v NUMBER;
  BEGIN
    FOR r IN (select sequence_name from user_sequences) LOOP
      EXECUTE IMMEDIATE 'ALTER SEQUENCE '|| r.sequence_name ||' INCREMENT BY 50';
      EXECUTE IMMEDIATE 'SELECT '|| r.sequence_name ||' .NEXTVAL FROM DUAL' INTO v;
    END LOOP;
  END;
  /