jpa pagingandsortingrepository save正在跳过自动生成的值

时间:2017-08-17 10:11:20

标签: java spring spring-data-jpa

我正在使用SPRING DATA JPA PagingAndSortingRepository来对ORACLE表执行CRUD操作。该示例具有自动生成的ID字段。当我执行myrepo.save()时,发布的值保存正常,但我注意到Id字段增加了2。例如,

  1. 我进行了保存,自动生成ID最终为64,例如
  2. 然后我再进行一次保存,ID值的值为66
  3. 然后我再进行一次保存,ID值的值为68
  4. 等等。我尝试在

    中添加allocationSize
    @SequenceGenerator(name="seq", initialValue=1, allocationSize=1)
    

    但这没有帮助。我仍然看到id增加了2.

    保存请求返回一个对象。因此,当我在postman中调试问题时,返回的对象似乎具有Id增量1,但最终在DB表中的是邮递员显示的值加上1.

    请告知以前是否有这种奇怪的行为。

    感谢您的帮助

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

将策略放在Id中应该足够了。如果你没有设置它,默认值是AUTO和AUTO将负责使用一种全局增量策略的数据库。

    @Id
    @GeneratedValue(strategy= GenerationType.TABLE)
    private Long id;

这是javadoc:

  

打开声明javax.persistence.GenerationType.TABLE

     

表示持久性提供程序必须为其分配主键   实体使用底层数据库表来确保唯一性。

     

javax.persistence.GenerationType.AUTO

     

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

希望有所帮助