在H2 DDL中始终作为标识生成 [英] GENERATE ALWAYS AS IDENTITY in h2 DDL

查看:0
本文介绍了在H2 DDL中始终作为标识生成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我们的项目中,我们使用Postgres数据库来开发生产环境,而对于junit测试,我们使用内存数据库中的h2。

想知道我们是否可以创建以生成始终为标识的DDL,以在H2数据库中插入具有唯一ID的每一行。

推荐答案

IDENTITY

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

H2中使用的这个单字语法是SQL:2003标准中定义的GENERATED … AS IDENTITY的缩写变体。请参阅PDF文档SQL:2003 Has Been Published中的摘要。其他数据库正在实现此功能,such as 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() ) ; 

返回生成的密钥

如果您希望返回生成的密钥,请参阅类似Answer of mine中的示例代码。

这篇关于在H2 DDL中始终作为标识生成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆