2016-03-08 61 views
0

我有以下PostgreSQL表:春數據PostgreSQL的鍵已經存在錯誤

CREATE TABLE IF NOT EXISTS levels (
    id SERIAL PRIMARY KEY, 
    name VARCHAR(256), 
    created_date timestamp, 
    updated_date timestamp 
); 

和對應的Spring數據實體:

@Entity 
@Table(name = "levels") 
public class Level extends BaseEntity implements Serializable { 

    private static final long serialVersionUID = 642499791438799548L; 

    @Id 
    @SequenceGenerator(name = "levels_id_seq", sequenceName = "levels_id_seq", allocationSize = 1) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "levels_id_seq") 
    private Integer id; 

    private String name; 

... 
} 

@MappedSuperclass 
public abstract class BaseEntity { 

    @Column(name = "created_date") 
    private Date createdDate; 

    @Column(name = "updated_date") 
    private Date updatedDate; 

    @PrePersist 
    void onCreate() { 
     setCreatedDate(new Date()); 
    } 

    @PreUpdate 
    void onPersist() { 
     setUpdatedDate(new Date()); 
    } 

... 
} 

這是我的春節,數據倉庫根:

@Repository 
public interface LevelRepository extends JpaRepository<Level, Integer> { 

    Level findByName(String name); 

} 

現在,當我嘗試使用Spring LevelRepository保存一個新的Level實體時,我收到以下錯誤:

ERROR: duplicate key violates unique constraint « levels_pkey » 
DETAIL: Key "(id)=(5)" already exists. 

我的配置有什麼問題?

+0

您嘗試過'strategy = GenerationType.AUTO'嗎? – gonzo

+0

你確定你的數據庫中沒有條目,已經有了ID = 5嗎? –

+0

我已經有ID = 5的實體在我的數據庫..但我認爲它應該足夠聰明,以生成新的不存在的ID ...但無論如何,我可以是錯誤的,因爲我是新的PostgreSQL – alexanoid

回答

1

改爲使用strategy=GenerationType.AUTO,您應該很好。 strategy=GenerationType.AUTO將使用表格來生成ID而不是使用序列。

+0

非常感謝! – alexanoid

相關問題