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行の単純なテーブルを作成するソリューションに出くわしました。この場合は機能します(Oracleスタイル):
select next value for TEST_SEQ from DUAL
しかし、hsqldbにはこのテーブルが付属しておらず、「初回起動」時に休止状態にしてこのようなテーブルを生成する方法がわかりません。
シーケンスの次の値をすぐに取得する方法が必要だと思っていて、それが欠落しているだけです。何か案は ?
tEST_SEQと呼ばれるシーケンスがあるとすると、次の値を選択する正しい方法は何でしょうか。
ドキュメント は次のように述べています。
次の例のように、シーケンスの次の値をSELECT、INSERT、およびUPDATEステートメントに含めることができます。
SELECT [...,] NEXT VALUE FOR <sequencename> [, ...] FROM <tablename>;
「正しい」方法(HSQLDBにないダムDUALテーブルのようなテーブルを含まないため、より単純であるため)は次のようになります。
call NEXT VALUE FOR [sequence_name];
これは 1.7.2 に現れ、これは実際にHibernateがHibernateCoreの「最近の」バージョンのHSQLDialect
でシーケンスを処理する方法です(参照 HHH-2839)。
そして確かに、これは私がhibernate-core-3.3.0.SP1.jar
のHSQLDialect
に見るものです。
public String getSequenceNextValString(String sequenceName) {
return "call next value for " + sequenceName;
}
したがって、私のアドバイスは次のとおりです。Hibernateの新しいバージョンにアップグレードすると、Hibernate Core3.2.5以前を使用している可能性が非常に高くなります。
どうやらあなたが実行した場合
_SET DATABASE SQL SYNTAX PGS
_(PGSはPostgresの略)
次に、select nextval('sequence_name')
http://hsqldb.org/doc/guide/dbproperties-chapt.html のような標準のPostgres構文を使用してクエリを実行できます。
また、これを一度実行すると、_call NEXT VALUE FOR SEQUENCE_NAME
_のような一般的なHSQLDBシーケンスが機能しなくなることにも注意してください。