Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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 指定为1时,Derby自动递增100_Java_Spring_Auto Increment_Derby - Fatal编程技术网

Java 指定为1时,Derby自动递增100

Java 指定为1时,Derby自动递增100,java,spring,auto-increment,derby,Java,Spring,Auto Increment,Derby,用于创建derby数据库表的In查询由主列自动递增组成 CREATE TABLE \"table\" (\n" + " \"id\" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) NOT NULL,\n" + " \"path\" VARCHAR(2000) DEFAULT NULL,\n" + " \"downlo

用于创建derby数据库表的In查询由主列自动递增组成

CREATE TABLE \"table\" (\n"
            + " \"id\" INTEGER  NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1) NOT NULL,\n"
            + " \"path\" VARCHAR(2000) DEFAULT NULL,\n"
            + " \"downloaded\" BOOLEAN DEFAULT false NOT NULL,\n"
            + " \"retried_times\" SMALLINT DEFAULT 0 NOT NULL,\n"
            + " \"name\" VARCHAR(40),\n"
            + " \"downloaded_date\" TIMESTAMP DEFAULT NULL,\n"
            + " PRIMARY KEY (\"id\")\n"
当我通过
springjdbc
插入一行时,它会增加100。查询中有错误吗

这是由于。Derby是内存中的数据库,当数据库首次加载到内存中时,它会缓存自动增量值。然后,使用缓存生成自动增量列的未来值,而不是一次又一次地查询数据库。如果数据库没有正确关闭,缓存中未使用的值将永远丢失

您有两个选项来解决此问题:

  • 添加
    ;shutdown=true
    到JDBC URL。这将在应用程序结束时关闭数据库
  • 将属性设置为
    1
    (其默认值为
    100
    )。这将确保从不缓存列值

  • 请注意,对于序列,大多数数据库的行为类似。例如,H2具有完全相同的行为,但使用了
    32
    的缓存大小,而不是像Derby那样使用
    100

    这肯定是Derby和H2中的一个严重错误。自动增量值应在不正确关机后进行检查和校正,在现实生活中,由于存在断电,有时需要硬复位等原因,无法保证正确关机。。。