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 jpa pagingandsortingrepository save将自动生成的值跳过1_Java_Spring_Spring Data Jpa - Fatal编程技术网

Java jpa pagingandsortingrepository save将自动生成的值跳过1

Java jpa pagingandsortingrepository save将自动生成的值跳过1,java,spring,spring-data-jpa,Java,Spring,Spring Data Jpa,我使用SpringDataJPAPagingandSortingRepository对ORACLE表执行CRUD操作。该示例有一个自动生成的ID字段。当我执行myrepo.save()时,发布的值被保存为ok,但我注意到Id字段增加了2。比如说, 例如,我进行了一次保存,自动生成id最终为64 然后我进行第二次保存,ID值将为66 然后我进行第二次保存,ID值将为68 等等。我尝试添加分配,如中所示 @SequenceGenerator(name="seq", initialValue=1, a

我使用SpringDataJPAPagingandSortingRepository对ORACLE表执行CRUD操作。该示例有一个自动生成的ID字段。当我执行myrepo.save()时,发布的值被保存为ok,但我注意到Id字段增加了2。比如说,

  • 例如,我进行了一次保存,自动生成id最终为64
  • 然后我进行第二次保存,ID值将为66
  • 然后我进行第二次保存,ID值将为68
  • 等等。我尝试添加分配,如中所示

    @SequenceGenerator(name="seq", initialValue=1, allocationSize=1)
    
    但这没有帮助。我仍然看到id增加了2

    保存请求返回一个对象。因此,当我调试postman中的问题时,返回的对象的Id似乎增加了1,但在DB表中结束的是postman显示的值加上1

    请告知以前是否见过这种奇怪的行为


    感谢您的帮助

    将策略放置在Id中就足够了。如果您没有将其设置为“自动”,则默认为“自动”,并且“自动”将向使用某种全局增量策略的数据库负责

        @Id
        @GeneratedValue(strategy= GenerationType.TABLE)
        private Long id;
    
    这是javadoc:

    打开声明javax.persistence.GenerationType.TABLE

    指示持久性提供程序必须为其分配主键 使用基础数据库表以确保唯一性的实体

    javax.persistence.GenerationType.AUTO

    指示持久性提供程序应选择适当的 特定数据库的策略。自动生成策略可能会 期望数据库资源存在,或者它可能尝试创建一个数据库资源。 供应商可以提供有关如何在中创建此类资源的文档 不支持架构生成或无法创建的事件 运行时的架构资源


    希望对您有所帮助。将策略放置在Id中就足够了。如果您没有将其设置为“自动”,则默认设置为“自动”,并且“自动”将赋予使用某种全局增量策略的数据库责任

        @Id
        @GeneratedValue(strategy= GenerationType.TABLE)
        private Long id;
    
    这是javadoc:

    打开声明javax.persistence.GenerationType.TABLE

    指示持久性提供程序必须为其分配主键 使用基础数据库表以确保唯一性的实体

    javax.persistence.GenerationType.AUTO

    指示持久性提供程序应选择适当的 特定数据库的策略。自动生成策略可能会 期望数据库资源存在,或者它可能尝试创建一个数据库资源。 供应商可以提供有关如何在中创建此类资源的文档 不支持架构生成或无法创建的事件 运行时的架构资源


    希望这会有所帮助

    我相信您面临的问题是SequenceGenerator对于应用程序来说是全局的。如果您在其他实体中使用相同名称的
    seq
    ,您也将增加它们。还有其他一些策略可能更适合处理这一问题。如果这是一个实体的ID,我建议使用
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    这提供了关于不同类型GeneratedValue的更多信息。

    我相信您面临的问题是SequenceGenerator对于应用程序来说是全局的。如果您在其他实体中使用相同名称的
    seq
    ,您也将增加它们。还有其他一些策略可能更适合处理这一问题。如果这是一个实体的ID,我建议使用
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    这提供了关于不同类型GeneratedValue的更多信息。

    您要将多少对象保存到数据库中。看起来您正在对多个实体使用相同的序列;我一次保存一个对象。ORACLE表有自己的序列,该序列随该特定表的触发器一起创建,并映射到此实体。要将多少对象保存到数据库中。看起来您正在对多个实体使用相同的序列;我一次保存一个对象。ORACLE表有它自己的序列,并为该特定表创建了一个触发器,该触发器映射到这个实体。我同意这是使用序列时的问题。但是,如果不想使用序列,则不必使用序列;我将.SEQUENCE替换为.IDENTITY,并确保使用的是唯一的命名为seq的名称。我仍然看到同样的问题。最奇怪的是,在《邮差》中,我的状态是200OK和id{“id”:117但ORACLE表中最后显示的是118。这很奇怪。您可以发布更多关于您的实体的信息吗?以及您如何使用它们?我同意这是使用sequence时的问题。但是,如果您不想使用sequence,则不必使用sequence。您好;我将.sequence替换为.IDENTITY,并确保我使用的是unique命名的seq名称。我仍然看到相同的问题。最奇怪的是,在《邮递员》中,我得到状态200OK和id{“id”:117,但ORACLE表中的结果是118。这很奇怪。你能发布更多关于你的实体的信息吗?以及你是如何使用它们的?