从SequenceGenerator获取下一个值

时间:2012-07-12 16:54:16

标签: jpa sequence-generators

我想使用SequenceGenerator并从序列生成器中获取下一个值。我想避免去DB,并依靠sequencegenerator给我一个独特的价值。此外,我使用该值在显示字段中显示唯一ID而不保留对象。

3 个答案:

答案 0 :(得分:4)

适用于Oracle:

Query q = em.createNativeQuery("SELECT nombreSecuencia.NEXTVAL FROM DUAL");

return (java.math.BigDecimal)q.getSingleResult();

答案 1 :(得分:2)

要获得下一个序列值,您可以使用以下内容:

Query q = em.createNativeQuery("select nextval('schema.sequence_name')");
return (Long)q.getSingleResult();

答案 2 :(得分:1)

如果我们忽略JPA value generation strategiesSEQUENCE strategy就是您的最佳选择。

  

与AUTO和IDENTITY不同,SEQUENCE策略会自动生成   一旦新的实体对象被持久化(即之前的值)   提交)。当需要主键值时,这可能很有用   早。要最小化往返到数据库服务器,ID是   分组分配。

     

每个分配中的ID数由allocationSize属性指定。

如果您需要先前序列中生成的ID,只需保留该对象并检索其ID即可。稍后您可以将其从持久性上下文中删除。


我不确定为什么在你坚持之前你需要身份证。我认为从序列生成器中获取价值毫无意义。我不建议你弄乱生成的值,我不建议你使用id的手动值。使用开箱即用的功能。