2016-05-28 60 views
1

所以我使用的是Postgres和Hibernate 4.2.2以及與類似實體上這個強制Hibernate離開ID空

@Entity(name = "Users") 
@Check(constraints = "email ~* '^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+[.][A-Za-z]+$'") 
@DynamicInsert 
public class Users { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id_user",unique = true) 
    @Index(name = "user_pk") 
    private Integer idUser; 

休眠仍然插入一些ID已在該表中,而不是把emtpy爲數據庫來填充它。另外,hibernate根據它的高速緩存迫使id不甚至檢查數據庫是否具有lates id。

我該如何強制它,這樣我可以將id留空並讓數據庫插入它?

首先,我認爲這是因爲我使用的是int,默認情況下int是0,但即使使用對象,它也只是強制其緩存中的id。

所以我的目標是讓數據庫填充id而不是hibernate或至少Hibernate,然後再填充它以首先檢查數據庫的id。

+0

向我們展示您用於插入您的實體的代碼 –

+0

行,所以這裏的錯誤是,當插入到Postgres中而不使用序列(在數據庫創建中插入數據時)序列保持靜止而沒有遞增,那是錯誤 –

+0

將其作爲您的問題的答案 –

回答

0

所以我得到的錯誤是
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "users_pkey" Detail: Key (id_user)=(1) already exists.
卻不是由Hibernate和緩存而是​​通過導入數據在創建數據庫,在那裏我插入造成給出IDS例如:
INSERT INTO users(id_user,email,password,tag) VALUES (1,'[email protected]','***','Adpleydu');
和序列生成沒有更新,所以如果我通過控制檯插入純SQL我得到了同樣的錯誤。

+0

不要將手動輸入的ID和自動生成的ID –