为什么Hibernate没有使用序列表中的下一个序列值?

时间:2013-06-27 21:06:50

标签: hibernate hsqldb

我们有一个使用序列生成器的实体凭据:

@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是GenerationType的SequenceGenerator.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);

Hibernate似乎根本没有使用这个表,因为它尝试使用的第一个id是1.

有什么想法吗?这是错误的GenerationType吗?

1 个答案:

答案 0 :(得分:0)

我发现我的脚本需要更新序列表CREDENTIALS_SEQUENCE。在HSQL中完成如下:

alter sequence credentials_sequence restart with 13;

未使用HIBERNATE_SEQUENCES。