【问题标题】:Generate sequence NexVal without execute select query生成序列 NexVal 而不执行选择查询
【发布时间】:2015-12-23 00:00:21
【问题描述】:

我的班级不是实体有代码片段

@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,可以吗?

【问题讨论】:

    标签: java hibernate sequence


    【解决方案1】:

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

    From G. Demecki

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

    【讨论】:

      【解决方案2】:

      你可以像thread中提到的那样消费nextVal,但你必须考虑它是通过SQL语句消费的,这意味着这是一个与数据库耦合的解决方案。

      我不知道以您在上面问的这种方式消费nextVal

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-26
        • 2012-11-18
        • 1970-01-01
        • 1970-01-01
        • 2014-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多