現有序列的Postgres我配置已經存在與JPA 2.1和Spring 4.3
@Id
@SequenceGenerator(name = "contacto_generator", sequenceName = "commons.contacto_sequence")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "contacto_generator")
private Long id;
我有註解,因爲我是在舊的應用程序數據庫指向實體。
當我升級的實體是好的,但是當我創建一個新的實體,順序不能很好地工作
序列「commons.contacto_sequence」是在509
我甚至激活「 show_sql」並運行:
select nextval ('commons.contacto_sequence')
如果我直接在數據庫中運行它,它會完全
Caused by: org.postgresql.util.PSQLException: ERROR: llave duplicada viola restricción de unicidad «pk_contacto»
Detail: Ya existe la llave (id)=(459).
我不知道那裏的459值,並在我的數據庫沒有序列具有價值
如果你看一下序列的名稱帶有生僻字控制檯
我不知道這是什麼可以或應該改變,因爲理論上來說應該是自動做Spring的東西。
如果這是因爲註釋已被棄用,並且不能很好地連接到序列或者可以。
該項目JPA 2.1,春季版本4.3.x
使用GenerationType.SEQUENCE策略:@GeneratedValue(策略= GenerationType.SEQUENCE,發電機=「contacto_generator 「) – adyjr
正如@adyjr所說,你必須使用SEQUENCE策略,因爲這是保證你的序列被使用的唯一方法。其次,也許如果您查看了所調用的SQL以及數據庫中的實際內容,您可能會找到答案(即調試)。如果它有一個重複的鍵,那麼該鍵已經存在於實體表中,那麼next_val的順序是什麼? –
數據庫有一個數據字典。一組包含數據庫本身信息的表。這應該包括序列。您應該可以使用它來查找所有序列及其當前值。 –