java standalone HSQLDB 2.0.0-rc8 で次のシーケンス値を選択する「正しい」方法




shutdown hsqldb (2)

TEST_SEQというシーケンスがあるとしたら、次の値を選択する正しい方法は何でしょうか?

documentationは次のような記述がありdocumentation

シーケンスの次の値は、次の例のように、SELECT文、INSERT文およびUPDATE文に含めることができます。

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

「正しい」方法(HSQLDBにないダムのDUALテーブルのようなテーブルを含まないため、より単純なので):

call NEXT VALUE FOR [sequence_name];

これは1.7.2で登場し、Hibernateが実際にHibernate Coreの "最近の"バージョン( HHH-2839参照)のHSQLDialectのシーケンスをどのように処理しているかを実際に示しています。

そして確かに、これはhibernate-core-3.3.0.SP1.jar HSQLDialectで私が見るものhibernate-core-3.3.0.SP1.jar

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

だから私のアドバイスです:新しいバージョンのHibernateへのアップグレード、あなたはおそらくHibernate Core 3.2.5以前を使用しています。

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と呼ばれる1行の単純なテーブルを作成するという解決策に出くわしました。 (オラクルスタイル):

select next value for TEST_SEQ from DUAL

hsqldbにはこのテーブルが付属していないので、「最初の起動」でこのようなテーブルを生成するためにHibernateをどのように取得できるかわかりません。

私が考えているのは、シーケンスの次の価値を得るための方法がなければならず、それを逃しているだけなのです。 何か案は ?


あなたが走ったら明らかに

SET DATABASE SQL SYNTAX PGS (PGSはPostgresの略)

select nextval('sequence_name')ような標準的なPostgres構文を使用してクエリを実行できますselect nextval('sequence_name')

また、これを一度行うcall NEXT VALUE FOR SEQUENCE_NAMEような典型的なHSQLDBシーケンスはもはや機能しません。





hsqldb