我的类不是实体,有代码片段
@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,有可能吗?
答案 0 :(得分:1)
您可以使用此thread中提到的nextVal
,但您必须考虑通过SQL语句使用它,这意味着这是一个与数据库耦合的解决方案。
我不知道如何以上述方式消费nextVal
。
答案 1 :(得分:0)
我们都知道使用@SequenceGenerator时Hibernate的默认行为 - 它将实际数据库序列增加1,将此值乘以50(默认的allocationSize值) - 然后将此值用作实体ID。
这意味着您的Java程序中未生成ID ID。它是在您的数据库中创建的。因此,在数据库中实际生成之前,您无法读取它。您可以使用G.Demecki描述的公式猜测它,但这肯定不是可行的方法。 如果你想要一个实体的id,只需保存它并从保存的返回值中读取id,保存实体本身应该是什么。