Java &引用;“正确”;HSQLDB 2.0.0-rc8中选择下一个序列值的方法
假设我有一个序列,叫做TEST_SEQ 选择下一个值的正确方法是什么? 这不起作用:Java &引用;“正确”;HSQLDB 2.0.0-rc8中选择下一个序列值的方法,java,sql,hibernate,orm,hsqldb,Java,Sql,Hibernate,Orm,Hsqldb,假设我有一个序列,叫做TEST_SEQ 选择下一个值的正确方法是什么? 这不起作用: select next value for TEST_SEQ 可能是因为它需要一个“FROM”子句。 查看hibernate中的hsqlDialante.getSequenceNextValString(),我看到了以下内容: "select next value for " + sequenceName + " from dual_" + sequenceName 在我的情况下,这会导致如下结果: selec
select next value for TEST_SEQ
可能是因为它需要一个“FROM”子句。
查看hibernate中的hsqlDialante.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风格):
但是hsqldb并没有这个现成的表,我也不知道如何让hibernate在“第一次启动”时生成这样一个表
我认为必须有一种方法从盒子里取出序列的下一个值,而我只是错过了它。
有什么想法吗
假设我有一个名为TEST_SEQ的序列,选择下一个值的正确方法是什么
而政府说:
序列的下一个值可以包含在SELECT、INSERT和UPDATE语句中,如下例所示:
SELECT [...,] NEXT VALUE FOR <sequencename> [, ...] FROM <tablename>;
因此,我的建议是:升级到更新版本的Hibernate,您很可能使用Hibernate Core 3.2.5或更高版本。显然,如果您运行
设置数据库SQL语法PGS TRUE
(PGS代表Postgres)
然后,您可以使用标准Postgres语法查询它,如selectNextval('sequence\u name')
如果尚未调用nextval
,它甚至不会为curval
返回任何内容,这可能与Postgres的行为类似
还请注意,如果您这样做一次,典型的HSQLDB序列(如序列名称的调用下一个值)将不再工作。看起来它们仍然有效
还要注意,更多的“异国情调”Postgres内容,如select last\u value from schemaName.sequence\u name
尚未被模拟/不起作用(用于获取序列的当前值,而不考虑会话)
避免由于以下原因导致此消息::org.hsqldb.hsqleexception:用户缺少权限或找不到对象:NEXTVAL
可能hibernate正在动态创建那些双\u xx表?奇怪
无论如何,您的方式在hsqldb 2.3.2中似乎对我有效:
select next value for <sequence name>;
为选择下一个值;
但是你不能给名字加别名,因为我必须这样做:
select next value for <sequence name> as <my name>, 3
为as选择下一个值,3
然后别名起作用了,不需要双重密码<代码>调用下一个值
我似乎无法别名…@hatchtman82不客气。顺便说一句:识别一个好答案的常用方法是向上投票;)@没问题。只是如果你认为答案是一个好的答案(很可能你接受它),那么IMO投票是有意义的,这就是如此。嗨,这可能是相关的。我正在使用Apache的DdlUtils在启动时生成数据库,使用这个xml作为id:
。插入对象时,我应该如何获得新的键值?我也在使用iBatis。
public String getSequenceNextValString(String sequenceName) {
return "call next value for " + sequenceName;
}
select next value for <sequence name>;
select next value for <sequence name> as <my name>, 3