如何获得适用于 H2 和 MariaDB 的序列的 nextVal
How to get nextVal of sequence that works for H2 as well as MariaDB
我使用 MariaDB 作为生产数据库,使用 H2 数据库进行测试。
我的问题:
我有一个查询来获取序列的下一个值,如下所示:
Query query = this.entitymanager.createNativeQuery("select nextval(seq_stayId)");
这在 MariaDB 上运行良好,但在 H2 数据库上不起作用。但是,如果我将查询更改为以下内容:
Query query = this.entitymanager.createNativeQuery("select nextval('seq_stayId')");
它适用于 H2 数据库,但不适用于 MariaDB。我知道 MariaDB 不喜欢这些字符串文字,但我怎样才能找到适用于两个数据库的解决方案?
如果你能帮助我,我将非常高兴。
提前致谢!
select next value for seq_stayId
H2 和 MariaDB 都支持。
NEXT VALUE FOR sequenceName
是 SQL 标准的一部分,你真的应该使用它来代替各种特定于供应商的表达式,尤其是当你需要在不同的环境中执行相同的 SQL数据库系统。
您可以在 spring 引导和管理属性文件中的值中创建多个配置文件属性
1: 申请-mariadb.properties
next.value.native.query=select nextval(seq_stayId)
2: 申请-h2db.properties
next.value.native.query=select nextval('seq_stayId')
然后你可以在你需要的 class
中使用 @Value 注释绑定这个 属性
@Component
class YouClassName{
@Value("next.value.native.query")
private String nextValueQuery;
public void whatEverIsYourMethodName() {
Query query = this.entitymanager.createNativeQuery(nextValueQuery);
}
}
然后您可以根据您需要的环境激活您的数据库配置文件。此外,如果您有特定于现有 dev/prod/test 或任何其他环境的数据库,那么您可以直接在现有环境属性文件
中使用该 属性
我使用 MariaDB 作为生产数据库,使用 H2 数据库进行测试。
我的问题: 我有一个查询来获取序列的下一个值,如下所示:
Query query = this.entitymanager.createNativeQuery("select nextval(seq_stayId)");
这在 MariaDB 上运行良好,但在 H2 数据库上不起作用。但是,如果我将查询更改为以下内容:
Query query = this.entitymanager.createNativeQuery("select nextval('seq_stayId')");
它适用于 H2 数据库,但不适用于 MariaDB。我知道 MariaDB 不喜欢这些字符串文字,但我怎样才能找到适用于两个数据库的解决方案?
如果你能帮助我,我将非常高兴。 提前致谢!
select next value for seq_stayId
H2 和 MariaDB 都支持。
NEXT VALUE FOR sequenceName
是 SQL 标准的一部分,你真的应该使用它来代替各种特定于供应商的表达式,尤其是当你需要在不同的环境中执行相同的 SQL数据库系统。
您可以在 spring 引导和管理属性文件中的值中创建多个配置文件属性
1: 申请-mariadb.properties
next.value.native.query=select nextval(seq_stayId)
2: 申请-h2db.properties
next.value.native.query=select nextval('seq_stayId')
然后你可以在你需要的 class
中使用 @Value 注释绑定这个 属性@Component
class YouClassName{
@Value("next.value.native.query")
private String nextValueQuery;
public void whatEverIsYourMethodName() {
Query query = this.entitymanager.createNativeQuery(nextValueQuery);
}
}
然后您可以根据您需要的环境激活您的数据库配置文件。此外,如果您有特定于现有 dev/prod/test 或任何其他环境的数据库,那么您可以直接在现有环境属性文件
中使用该 属性