使用所有主键值,新行没有 space。我能做些什么?

all primary key values are used and there is no space for new rows. what can I do?

我有一个无法更改的实体 supper class,它包含一个作为 OID(主键)归档的整数。 如您所知,整数可以具有 -2,147,483,648 到 2,147,483,647 之间的值,现在使用所有这些范围。不幸的是我无法将整数类型更改为 long。所以 hibernate 开始在这个范围内创建另一个有效的键,但是 oracle 说这是一个唯一的约束违规。 任何想法将不胜感激。 实体 class:

@MappedSuperclass
public abstract class EtVersionlessEntity
{
  private Integer oid;

  @Id
  public Integer getOid()
  {
    return this.oid;
  }

Oracle 列类型为 NUMBER(10)。

将数据类型更改为可以容纳更大值的类型。

unfortunately I can't change integer type to long.

那你就卡住了;你需要使用更大的数据类型,但你 unwilling/unable 这样做所以你现在有 运行 out of space.

你要么:

  • 接受数据类型不会改变并且您有 运行 个唯一值;或
  • 您增加了所使用的数据类型的大小,以允许您拥有更大范围的值。

有人给了我一个解决方案,我想作为答案分享:

  1. 创建一个类似于 jar 文件中的 class 的 class(具有相同的 名称和包装)
  2. 删除"extends"并定义一个相同的变量 名称作为 long 类型的父级:

    private long oid; 
    @Id
    public long getOid()
    {
       return this.oid;
    }
    

    3.go 到 ORM 文件,并为父

    定义的键添加所有规范
    <mapped-superclass class="EtEntity">
          <attributes>
             <id name="oid">
                <generated-value generator="HI_LO_SEQ" strategy="TABLE" />
                <table-generator name="HI_LO_SEQ" allocation-size="1000"/>
             </id>
         </attributes>
    </mapped-superclass>
    
  3. 更改数据库列以接受长值 (NUMBER(19))

就是这样!工作...