5
我想插入到我的postgresql使用Hibernate和Java EE的新記錄。休眠:重複鍵值違反唯一約束
這是我的模型:
@Entity
@SuppressWarnings("serial")
@Inheritance(strategy=InheritanceType.JOINED)
public class BaseDesign implements Serializable {
@Id
@Expose
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@Version
@Column(name = "version")
private int version;
@Expose
@Column(name = "name")
private String name;
// getter and setter
}
這裏是我的import.sql
INSERT INTO basedesign (id, name, version) VALUES (1, 'China', 0);
當我建立的代碼,該記錄將加入到數據庫。
然而,當我嘗試添加使用EntityManager的一個新的記錄,像這樣:
BaseDesign design = new BaseDesign();
design.setName("USA");
em.persist(design);
我:
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "basedesign_pkey"
Detail: Key (id)=(1) already exists.
的第二次執行相同的命令,它的成功。
爲什麼Hibernate不會在第一次增加起始ID?以及如何配置它從最後一個插入的整數開始?
所以這個解決方案必須已知數量的分配呢?它不能自動拾取最後一個ID? – VHanded
問題是您的SQL插入語句手動插入了一個ID。系統可以自動提取ID,前提是您始終*讓系統生成ID並且永遠不會爲ID列提供值。 –
謝謝。我試圖實現的是備份和恢復。當我從DB生成一個轉儲文件時,它帶有帶有ID的INSERT語句。由於該ID不是由DB生成的,因此導致了上述問題。 – VHanded