使用JPA 2.1和Spring 4.3的现有序列Postgres

时间:2017-05-27 16:54:49

标签: spring hibernate jpa spring-data-jpa sequence

我正在配置已存在的数据库指向实体

@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,Spring 4.3.x

1 个答案:

答案 0 :(得分:0)

尝试使用GenerationType.SEQUENCE策略:

@Id
@SequenceGenerator(name = "contacto_generator", sequenceName = "commons.contacto_sequence")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "contacto_generator")
private Long id;