H2 内存数据库和自定义 @GenericGenerator 策略

Posted

技术标签:

【中文标题】H2 内存数据库和自定义 @GenericGenerator 策略【英文标题】:H2 in-memory database and custom @GenericGenerator strategy 【发布时间】:2015-10-01 09:08:16 【问题描述】:

我尝试使用 Bypass GeneratedValue in Hibernate (merge data not in db?) 中的自定义 id-generator,它在使用 Postgres DB 时运行良好。我的代码等于示例中的代码。 但是在使用 H2 内存数据库运行测试时,我遇到了问题,该 id 不是自动生成的。

没有自定义生成器

@Column(name = "id", nullable = false)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

生成的创建表脚本

create table db.schema.entity (id  bigserial not null...

带有自定义生成器

@Column(name = "id", nullable = false)
@Id
@GeneratedValue(generator = "idGenerator", strategy = GenerationType.IDENTITY)
@GenericGenerator(name="idGenerator", strategy = "...UseIdOrGenerate")
private Long id;

生成的创建表脚本

create table db.schema.entity (id int8 not null...

因此测试不起作用。

【问题讨论】:

你的测试怎么样? @LeonidGlanz 简单 junit 测试:创建并持久化实体,然后检查该实体是否存在于数据库中。 【参考方案1】:

通过改变@Column解决

@Column(name = "id", nullable = false, columnDefinition = "bigserial")

【讨论】:

以上是关于H2 内存数据库和自定义 @GenericGenerator 策略的主要内容,如果未能解决你的问题,请参考以下文章

监控linux的系统资源和自定义进程的cpu 内存占用。

如何在内存数据库中使用 H2 测试 EntityManager 查询

使用 Liquibase 为 Spring Boot 应用程序中的单元测试初始化​​内存 H2

如何使用 H2 嵌入式数据库创建 H2 内存数据库

nginx缓存和自定义header

在同一应用程序中使用内存中的 H2 和 H2 文件