Получить следующее значение из 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.
Если вам требуется сгенерированный идентификатор из последовательности ранее, просто сохраните объект и получите его идентификатор. Позже вы можете удалить его из контекста постоянства.
Я не уверен, почему вам нужно удостоверение личности, прежде чем продолжать. И я думаю, что нет смысла получать значение от генератора последовательности. Я не рекомендую вам возиться с сгенерированными значениями, и я не рекомендую вам использовать ручные значения для идентификаторов. Используйте готовую функциональность.