在h2 DDL中生成始终相同的标识

  • 本文关键字:标识 h2 DDL postgresql h2
  • 更新时间 :
  • 英文 :


在我们的项目中,我们使用postgres数据库进行开发到生产环境,而对于junit测试,我们使用H2内存数据库。

想知道我们是否可以使用GENERATE ALWAYS作为标识创建DDL,以便在H2数据库中插入具有唯一id的每一行。

IDENTITY

在H2中,使用IDENTITY类型,用于自动生成递增的64位长整数。

H2中使用的这个单词语法是SQL:2003标准中定义的GENERATED … AS IDENTITY的缩写变体。请参阅PDF文档SQL:2003已发布中的摘要。其他数据库也在实现这一点,比如Postgres。

CREATE TABLE event_ 
( 
pkey_ IDENTITY NOT NULL PRIMARY KEY ,  -- ⬅ `identity` = auto-incrementing long integer.
name_ VARCHAR NOT NULL ,
start_ TIMESTAMP WITH TIME ZONE NOT NULL , 
duration_ VARCHAR NOT NULL
) 
;

示例用法。无需为pkey列值传递值,因为它是由H2自动生成的。

INSERT INTO event_ ( name_ , start_ , stop_ )
VALUES ( ? , ? , ? ) 
;

还有Java。

ZoneId z = ZoneId.of( "America/Montreal" ) ;
OffsetDateTime start = ZonedDateTime.of( 2021 , Month.JANUARY , 23 , 19 , 0 , 0 , 0 , z ).toOffsetDateTime() ; 
Duration duration = Duration.ofHours( 2 ) ;
myPreparedStatement.setString( 1 , "Java User Group" ) ;
myPreparedStatement.setObject( 2 , start ) ;
myPreparedStatement.setString( 3 , duration.toString() ) ; 

返回生成的密钥

如果您想返回生成的密钥,请参阅我的类似答案中的示例代码。

相关内容

  • 没有找到相关文章

最新更新