我正在使用SPRING DATA JPA PagingAndSortingRepository来对ORACLE表执行CRUD操作。该示例具有自动生成的ID字段。当我执行myrepo.save()时,发布的值保存正常,但我注意到Id字段增加了2。例如,
等等。我尝试在
中添加allocationSize@SequenceGenerator(name="seq", initialValue=1, allocationSize=1)
但这没有帮助。我仍然看到id增加了2.
保存请求返回一个对象。因此,当我在postman中调试问题时,返回的对象似乎具有Id增量1,但最终在DB表中的是邮递员显示的值加上1.
请告知以前是否有这种奇怪的行为。
感谢您的帮助
答案 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生成策略可以 期望存在数据库资源,或者可能尝试创建数据库资源。 供应商可能会提供有关如何创建此类资源的文档 它不支持模式生成或无法创建的事件 运行时的架构资源。
希望有所帮助