2017-07-27 81 views
0

我使用的是编号自动GeneratedType序列序列生成类型问题SQL JPA

@GeneratedValue(strategy = GenerationType.SEQUENCE) 

我有ID列

180 
181 
182 
200 
230 

在表格下面的值,但我的顺序好像是从180,181 and 183序列事件递增即使我已经有200 and 230在表中

然后顺序达到200,我得到一个唯一的键异常。

是否有任何方法可以管理GenerationType,以便根据列中可用的最大值进行增加。

How can I make the next increment to be 231 instead of 184?. 

回答

0

您可以使用initialValue属性设置序列的初始值。

@SequenceGenerator(name = "TABLE1_SEQ", sequenceName = "TABLE1_SEQ", initialValue = 231) 
@GeneratedValue(generator = "TABLE1_SEQ") 

如果值从JPA应用程序之外添加到您的表非常使用,使该序列保持最新从数据库中相同的序列(或任何你使用生成策略)。

如果它更适合您,也可以使用表生成器或身份生成。

您还可以使用SQL脚本直接在数据库中更新序列。 但是,如果您同时持续更新JPA外部的同一个表,则没有直接告诉JPA始终使用最大ID的方法。

+0

表生成器或标识生成器的用途 –

+0

它们是其他类型的可用策略(如序列)。您可以根据您的数据库系统选择一个。我提到它们的原因是,由于ID为200和230,所以它们必须在您的JPA应用程序之外创建,而不使用序列,即使用其他方式生成ID,所以最好将JPA应用程序与同一ID同步在JPA之外使用生成策略,否则最终会出现您现在遇到的情况。简而言之,请更改您的JPA应用程序代码或您的非JPA应用程序代码以相互匹配。 – Ranjeet