我想使用SequenceGenerator并从序列生成器中获取下一个值。我想避免去DB,并依靠sequencegenerator给我一个独特的价值。此外,我使用该值在显示字段中显示唯一ID而不保留对象。
答案 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 strategies,SEQUENCE strategy就是您的最佳选择。
与AUTO和IDENTITY不同,SEQUENCE策略会自动生成 一旦新的实体对象被持久化(即之前的值) 提交强>)。当需要主键值时,这可能很有用 早。要最小化往返到数据库服务器,ID是 分组分配。
每个分配中的ID数由allocationSize属性指定。
如果您需要先前序列中生成的ID,只需保留该对象并检索其ID即可。稍后您可以将其从持久性上下文中删除。
我不确定为什么在你坚持之前你需要身份证。我认为从序列生成器中获取价值毫无意义。我不建议你弄乱生成的值,我不建议你使用id的手动值。使用开箱即用的功能。