"正确"在HSQLDB 2.0.0-rc8中选择下一个序列值的方法 [英] "correct" way to select next sequence value in HSQLDB 2.0.0-rc8

查看:130
本文介绍了"正确"在HSQLDB 2.0.0-rc8中选择下一个序列值的方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有一个序列,名为TEST_SEQ
,那么选择下一个值的正确方法是什么?
这不起作用:

 为TEST_SEQ选择下一个值 

可能是因为它期望有一个FROM子句。
在hibernate中查看HSQLDialect.getSequenceNextValString()我看到这个:

 select next value for+ sequenceName + from dual_+ sequenceName  

在我的情况下会导致类似的结果:

 从dual_TEST_SEQ中为TEST_SEQ选择下一个值 

为2.0.0-RC8工作(我只假设这在2.0版以前的版本 - 未经验证)
我遇到了一个解决方案,涉及创建一个简单的表,称为DUAL,在这种情况下,这将工作(oracle风格):

 从DUAL选择下一个TEST_SEQ值 

但是hsqldb并没有附带这个表格,我不知道如何让hibernate在第一次启动时生成这样的表格。



我认为必须有一种方法来获得开箱即用的下一个值,并且即时忽略它。
的任何想法?

解决方案


假设我有一个序列,称为TEST_SEQ什么是选择下一个值的正确方法是什么?


虽然 documentation 表示:


序列的下一个值可以包含在SELECT,INSERT和UPDATE语句如下例所示:

  SELECT [...,] NEXT VALUE FOR< sequencename> [,...] FROM< tablename>; 


正确的方式(因为更简单,因为不涉及表像HSQLDB不具备的DUAL DUAL表一样):

 调用[sequence_name]的下一个值; 

这出现在 1.7.2 ,这实际上Hibernate是如何处理最近的 HSQLDialect Hibernate Core版本(请参阅 HHH-2839 )。

事实上,这就是我在 HSQLDialect 中看到的 hibernate-core- 3.3.0.SP1.jar

  public String getSequenceNextValString(String sequenceName){
返回call next value for+ sequenceName;





$ b

所以我的建议是:升级到更新版本的Hibernate,你很可能使用Hibernate Core 3.2.5或更高版本。


suppose i have a sequence, called TEST_SEQ what would be the correct way of selecting its next value ? this does not work:

select next value for TEST_SEQ

probably because it expects a "FROM" clause. looking at HSQLDialect.getSequenceNextValString() in hibernate i see this:

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

which in my case would result in something like:

select next value for TEST_SEQ from dual_TEST_SEQ

which does not work for 2.0.0-rc8 (i only assume this works in pre-2.0 versions - havent verified) I've come across a solution that involves creating a simple table with 1 row called DUAL, in which case this will work (oracle style):

select next value for TEST_SEQ from DUAL

but hsqldb does not come with this table out of the box, and im not sure how i can get hibernate to generate such a table on "first boot".

Im thinking there has to be a way to get the next value for a sequence out of the box and im just missing it. any ideas ?

解决方案

suppose i have a sequence, called TEST_SEQ what would be the correct way of selecting its next value ?

While the documentation says:

The next value for a sequence can be included in SELECT, INSERT and UPDATE statements as in the following example:

SELECT [...,] NEXT VALUE FOR <sequencename> [, ...] FROM <tablename>;

the "correct" way (because simpler, because not involving a table like a dumb DUAL table that HSQLDB doesn't have) would be:

call NEXT VALUE FOR [sequence_name];

This appeared in 1.7.2 and this his actually how Hibernate handles sequences in the HSQLDialect of "recent" versions of Hibernate Core (see HHH-2839).

And indeed, this is what I see in the HSQLDialect of hibernate-core-3.3.0.SP1.jar:

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

So my advice is: upgrade to a newer version of Hibernate, you are very likely using Hibernate Core 3.2.5 or prior.

这篇关于&QUOT;正确&QUOT;在HSQLDB 2.0.0-rc8中选择下一个序列值的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆