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

时间:2015-09-25 07:52:04

标签: java hibernate sequence

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

@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());

}

我想像这样检索nextVal,有可能吗?

2 个答案:

答案 0 :(得分:1)

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

我不知道如何以上述方式消费nextVal

答案 1 :(得分:0)

  

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

     

From G. Demecki

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