当前位置: 首页 > 面试题库 >

在HSQLDB 2.0.0-rc8中选择下一个序列值的“正确”方法

蓝昊天
2023-03-14
问题内容

假设我有一个称为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之前的版本中有效-
尚未验证)我遇到了一个解决方案,其中涉及创建一个简单的表,其中包含1行称为DUAL的表(oracle样式):

select next value for TEST_SEQ from DUAL

但是hsqldb并没有随该表一起提供,我不确定我如何在“首次启动”时进入hibernate状态来生成这样的表。

我认为必须有一种方法可以立即获得序列的下一个值,而我只是错过了它。有任何想法吗 ?


问题答案:

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

虽然文档说:

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

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

“正确”的方式(因为更简单,因为不涉及HSQLDB没有的像哑DUAL表这样的表)将是:

call NEXT VALUE FOR [sequence_name];

这出现在1.7.2中,这实际上是Hibernate如何处理HSQLDialect“最新”版本的Hibernate
Core(参见
HHH-2839
)中的序列的方法。

实际上,这就是我在中看到HSQLDialecthibernate-core-3.3.0.SP1.jar

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

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



 类似资料:
  • 我想在选择另一个select元素的一个选项时显示一个select元素,在选择另一个选项时隐藏它。 这是JavaScript: 感谢任何帮助。谢谢

  • 为了优化存储,在任何情况下均应使用最精确的类型。例如,如果列的值的范围为从1到99999,若使用整数,则MEDIUMINT UNSIGNED是好的类型。在所有可以表示该列值的类型中,该类型使用的存储最少。 用精度为65位十进制数(基于10)对DECIMAL列进行所有基本计算(+、-、*、/)。参见11.1.1节,“数值类型概述”。 使用双精度操作对DECIMAL值进行计算。如果准确度不是太重要或如

  • 问题内容: 我有一个映射为实体的类,可将其持久保存在数据库中。我有一个id字段作为主键,因此每次持久存储对象时,都会从序列“ myClass_pk_seq”中检索id的值,该代码类似于以下代码。 我需要在“代码”属性中添加类似于id的内容。我需要一个序列,以便我可以分配代码以编码序列的下一个值(以保留该值,以防用户想要保留它而又不保留数据)。我的意思是用户将看到该字段,如果他不知道要输入什么,则可

  • 问题内容: 假设我有这张桌子(小提琴可用)。 我按行对行进行分组,对于每个组,我都希望从column中获得一个值。但是,我不需要 任何 值,但是我想从具有maximal的行中获取值,并从所​​有这些中获取具有maximal的值。换句话说,我的结果应该是 当前解决方案 我知道一个查询来实现这一点: 题 但是我认为这个查询 很难看 。主要是因为它使用了一个 依赖的子查询 ,感觉就像是真正的性能杀手。因

  • 问题内容: 我有一个MySQL表,其中包含以下类型的信息: 这是我用来从该表获取数据的脚本示例: 该脚本显示表格中的每个日期,例如 我只想显示唯一的日期,例如 问题答案: 在MySQL中使用DISTINCT运算符:

  • 问题内容: 我在对Postgres数据库使用github.com/bmizerany/pq。我需要选择“ todos”表中的所有行,并为每一行检查条件并相应地更新行。伪代码: UpdateTask()函数将发出一条SQL更新语句来更新该行。 在SELECT查询中发出SQL更新是否会锁定数据库?这是进行这种更新的正确方法吗? 问题答案: 首先, 至少 您应该这样做,以防止其他访问锁定行。您必须在事务