当前位置: 首页 > 知识库问答 >
问题:

生成序列NexVal而不执行选择查询

许招
2023-03-14

我的类不是实体,有代码片段

@SequenceGenerator(name="seqUniqueKeyGenerator",sequenceName="SEQ_UNIQUE_KEY",allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seqUniqueKeyGenerator")
@Id
private Integer sequenceId;

public Integer getSequenceId() {
    return sequenceId;
}

public void setSequenceId(Integer sequenceId) {
    this.sequenceId = sequenceId;
}

public static void main(String[] args) {
    UniqueKeyGenerator uniqueKeyGenerator = new UniqueKeyGenerator();
    System.out.println(uniqueKeyGenerator.getSequenceId());

}

我想像这样检索下一个瓦尔,可以吗?

共有2个答案

左丘楷
2023-03-14

我们都知道 Hibernate 在使用 @SequenceGenerator 时的默认行为 - 它将实际数据库序列增加 1,将此值乘以 50(默认 allocationSize 值) - 然后将此值用作实体 ID。

来自G.Demecki

这意味着 ID ID 未在 Java 程序中生成。它是在您的数据库中创建的。因此,在数据库中直接生成之前,您无法读取它。你可以用G.Demecki描述的公式来猜测它,但这肯定不是要走的路。如果你想要一个实体的id,只需保存它,并从保存的返回值中读取id,应该是保存的实体本身。

苏鸿志
2023-03-14

您可以使用此线程中提到的nextVal,但您必须考虑它是通过SQL语句使用的,这意味着这是一个与数据库耦合的解决方案。

我不知道如何以你在上面询问的方式使用< code>nextVal。

 类似资料:
  • 我想使用QueryDSL库构建select count查询,如下所示: 中选择计数(1) 我创建了下一个代码: 由于结果selectStatement是Next: 能否请一些人建议如何重写上面的代码

  • 我试图使用CritierBuilder/CrtieriaQuery执行select语句,从表a中选择某些字段,然后如果该记录存在于另一个表中,则使用布尔标志。 基本上,我有一个“官员”列表和一个用户列表。用户是使用该系统的人,可以为官员添加书签/保存信息。当用户询问官员时,我希望能够显示他们已经为哪些官员添加了书签。 所以这个查询,我在我的h2数据库控制台中运行,它(相当)有效。如果官员被用户12

  • 但是我在遗留系统上有一个具有许多属性的对象,我只想选择几个,尽管我知道选择几个属性通常是很快的。 如果不使用条件查询,这可能吗?

  • 我有一个名为TEST的表,列名为col1、col2、col3、col4。。。。。。。。。。所以,从信息模式来看。列我将获得有关此表对象的详细信息。 现在,我想通过从信息_模式中提供列名称,从测试表中构建一个select查询。柱。像这样,从information_schema中选择column_name。表_name='TEST'中的列。这会回来的 col1 col2 col3 我想在selectq

  • 第二种形式的条件执行是选择执行,选择执行中存在有两种可能,由条件表达式来决定哪种可能被执行。语法看起来像这样: if( x%2 == 0) { cout << "x is even" << endl; }else{ cout << "x is odd" << endl; } 如果x除以2得到的余数是0,则我们知道X是偶数,代码会输出一条信息表明此意。由于条件非真即假,因而有且仅有一条语句

  • 问题内容: 我要查询所有10个表以从中获取用户ID,并将所有用户ID加载到HashSet中,以便可以拥有唯一的用户ID。 截至目前,它是按顺序进行的。我们转到一个表,并从中提取所有user_id并将其加载到哈希集中,然后将其存储在第二个和第三个表中并继续运行。 有什么方法可以使这个多线程的,以便他们为每个表并行地从我的表中获取数据?最后,我需要哈希集,该哈希集应具有所有10个表中的所有唯一用户ID