假设我有一个序列,称为 TEST_SEQ
选择下一个值的正确方法是什么?
这不起作用:
select next value for TEST_SEQ
可能是因为它需要一个“FROM”子句。
在休眠中查看 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 的包含 1 行的简单表,在这种情况下这将起作用(oracle 风格):
select next value for TEST_SEQ from DUAL
但 hsqldb 并未附带此表,我不确定如何让 hibernate 在“首次启动”时生成这样的表。
我认为必须有一种方法可以开箱即用地获取序列的下一个值,但我只是错过了它。
有任何想法吗 ?
假设我有一个名为 TEST_SEQ 的序列,选择其下一个值的正确方法是什么?
虽然文档 http://www.hsqldb.org/doc/1.8/guide/ch09.html says:
序列的下一个值可以包含在 SELECT、INSERT 和 UPDATE 语句中,如下例所示:
SELECT [...,] NEXT VALUE FOR <sequencename> [, ...] FROM <tablename>;
“正确”的方式(因为更简单,因为不涉及像 HSQLDB 没有的哑 DUAL 表这样的表)是:
call NEXT VALUE FOR <sequence_name>;
这出现在1.7.2 http://article.gmane.org/gmane.comp.java.hsqldb.user/3718这实际上就是 Hibernate 处理序列的方式HSQLDialect
Hibernate Core 的“最新”版本(参见 HHH-2839 https://hibernate.atlassian.net/browse/HHH-2839罢工>)。
事实上,这就是我在HSQLDialect
of hibernate-core-3.3.0.SP1.jar
:
public String getSequenceNextValString(String sequenceName) {
return "call next value for " + sequenceName;
}
所以我的建议是:升级到较新版本的 Hibernate,您很可能使用 Hibernate Core 3.2.5 或更早版本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)