2013-06-27 46 views
0

我們有一個使用序列發生器的實體憑證:爲什麼Hibernate不使用序列表中的下一個序列值?

@Entity 
@Table(name = "CREDENTIALS") 
@SequenceGenerator(name = "CredentialsSequenceGenerator", sequenceName = "CREDENTIALS_SEQUENCE") 
public class Credentials extends AbstractTraceable implements Serializable { 

    ... 

    @Id 
    @Column(name = "ID", unique=true) 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "CredentialsSequenceGenerator") 
    public Long getId() { 
     return id; 
    } 

我們遇到的問題是在我們的測試。我們使用EmbeddedDatabaseBuilder.addScript(「...」)將一些數據加載到數據庫中,然後在測試中我們嘗試創建一些對象。第一插入失敗,因爲主鍵已經被使用:

15:54:02.777 [main] DEBUG org.hibernate.id.SequenceGenerator - Sequence identifier 
generated: BasicHolder[java.lang.Long[0]] 
15:54:02.779 [main] DEBUG o.h.e.i.AbstractSaveEventListener - Generated identifier: 
1, using strategy: org.hibernate.id.SequenceHiLoGenerator 

我underestanding是SequenceGenerator爲GenerationType.SEQUENCE使用稱爲「hibernate_sequences」的序列表中,具有以下結構(這是由的SchemaExport生成):

create table hibernate_sequences (
    sequence_name varchar(255), 
    sequence_next_hi_value integer 
); 

在我們的腳本,我們增加序列表:

insert into hibernate_sequences VALUES('CREDENTIALS_SEQUENCE', 13); 

似乎休眠不使用此表在所有,因爲它嘗試使用的第一個ID是1.

任何想法?這是錯誤的GenerationType?

+0

序列生成器使用序列,而不是表格。打開SQL日誌記錄,你會知道哪些查詢是由休眠執行的 –

+0

明白了。我不知道爲什麼Hibernate SchemaExport正在生成「hibernate_sequences」。這使我困惑。它根本沒有被使用。正如您所說,正在使用CREDENTIALS_SEQUENCE。 –

回答

0

我發現我的腳本需要更新序列表CREDENTIALS_SEQUENCE。在HSQL中,完成如下:

alter sequence credentials_sequence restart with 13; 

HIBERNATE_SEQUENCES未使用。

+0

你能告訴我你在哪裏做了這個? –

相關問題