在HSQLDB2.0.0-Rc8中如何选择下一个序列值的“正确”方法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

假设我有一个序列,叫做test_SEQ选择下一个值的正确方法是什么?这是行不通的:

select next value for TEST_SEQ

可能是因为它需要一个“From”爪子。查看Hibernate中的HSQLDialect.getSequenceNextValString(),我看到如下内容:

"select next value for " + sequenceName + " from dual_" + sequenceName

在我的例子中会产生这样的结果:

select next value for TEST_SEQ from dual_TEST_SEQ

对于2.0.0-Rc8(我只假设这在2.0之前的版本中有效---未经验证),我遇到了一个解决方案,它涉及创建一个简单的表,名为DUAL,在这种情况下,这种方法将有效(Oracle样式):

select next value for TEST_SEQ from DUAL

但是hsqldb并没有提供这个表,我也不确定如何才能让Hibernate在“第一次启动”时生成这样的表。

我想,必须有一个方法来获得下一个值,一个序列的盒子,我只是错过了。有什么想法吗?

提问于
用户回答回答于

如下:

call NEXT VALUE FOR [sequence_name];

这个出现在1.7.2实际上,Hibernate是如何处理HSQLDialect最新版本的Hibernate Core

事实上,这就是我在HSQLDialecthibernate-core-3.3.0.SP1.jar:

public String getSequenceNextValString(String sequenceName) {
    return "call next value for " + sequenceName;
}

用户回答回答于

运行:

SET DATABASE SQL SYNTAX PGS(PGS代表Postgres)

然后,您可以使用标准Postgres语法查询它,如select nextval('sequence_name')

还请注意,如果您曾经这样做,典型的HSQLDB序列如下call NEXT VALUE FOR SEQUENCE_NAME不再起作用了。

扫码关注云+社区