Получить следующее значение из SequenceGenerator

Я хотел бы использовать SequenceGenerator и получить следующее значение от генератора последовательности. Я хочу избежать поездки в БД и положиться на генератор последовательностей, чтобы дать мне уникальную ценность. Также я использую значение для отображения уникального идентификатора в поле отображения без сохранения объекта.

3 ответа

Работает в Oracle:

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

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

Чтобы получить только следующее значение последовательности, вы можете использовать следующее:

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

Если мы упускаем из виду стратегии создания стоимости JPA, стратегия SEQUENCE является лучшей в вашем случае.

В отличие от AUTO и IDENTITY, стратегия SEQUENCE генерирует автоматическое значение, как только новый объект сущности сохраняется (то есть до фиксации). Это может быть полезно, когда значение первичного ключа требуется ранее. Чтобы свести к минимуму обращения к серверу базы данных, идентификаторы распределяются по группам.

Количество идентификаторов в каждом выделении определяется атрибутом allocSize.

Если вам требуется сгенерированный идентификатор из последовательности ранее, просто сохраните объект и получите его идентификатор. Позже вы можете удалить его из контекста постоянства.


Я не уверен, почему вам нужно удостоверение личности, прежде чем продолжать. И я думаю, что нет смысла получать значение от генератора последовательности. Я не рекомендую вам возиться с сгенерированными значениями, и я не рекомендую вам использовать ручные значения для идентификаторов. Используйте готовую функциональность.

Другие вопросы по тегам