Я использую Generator для генерации первичных ключей для всех таблиц. Недавно я получил требование, которое мне нужно получить инкрементированным id программно, не сохраняя объект в базе данных. Я считаю, что это может быть достигнуто путем вызова внутреннего интерфейса hibernate. В любом случае знает, как получить инкрементированный id программно с помощью спящего режима?Hibernate программно увеличивается с увеличением ID
ответ
Я смотрел код NHibernat (это, безусловно, работает для Hibernate). Вы можете вызвать генератор id, но это не поможет, потому что сгенерированный идентификатор не будет использоваться при хранении объекта.
Это то, что концептуально не работает. Вы не можете автоматически генерировать идентификаторы системы и генерировать их за пределами процедуры хранения одновременно.
Эти варианты, которые приходят на ум:
- Использование ID генератора «назначен» и генерировать идентификаторы самостоятельно. Это единственный способ, которым вы можете назначить идентификатор, который был определен перед сохранением. (Обратите внимание, что нет тривиальной генерации уникальных чисел в системе параллельных транзакций.) Это не очень удобно для вашего кода, как вы увидите.
- Вопрос требование. Как только объект идентифицируется с пользователем, не должно ли оно быть постоянным?
- Рассмотрите возможность отделения видимого идентификатора от первичного ключа. Возможно, избыточный уровень должен иметь идентификаторы в системе, которые должны быть определены до другого, но в противном случае они отделяют ваши первичные ключи от пользовательских данных. Вы можете переключиться на другие генераторы ID по техническим причинам, не противоречив требованиям. (По аналогии с первым пунктом, но не баловаться с первичными ключами больше.) не
Мне нужно реализовать это, потому что мне нужно бегущее число, чтобы построить код, который позже будет храниться в базе данных. например. US-ABC-1000001, и я не хочу создавать порядковый номер для этого. – kenn3th
Если вы хотите иметь его, как описано, вам необходимо либо назначить первичный ключ, либо выделить часть «US-ABC-1000001» из первичного ключа. В обоих случаях вам необходимо самостоятельно управлять порядковым номером. Вы, вероятно, можете (неправильно) использовать генераторы ID Hibernate для этого. Генераторы ID обычно не имеют большого количества кода, и вы также можете просто реализовать его самостоятельно. –
- 1. PHP - импорт CSV с автоматическим увеличением ID
- 2. DbUnit: проблема с генерацией id увеличивается
- 3. Добавление нового элемента с увеличением id-number
- 4. Время отклика Увеличивается с увеличением параллелизма в Java
- 5. Время выполнения увеличивается с увеличением заданий на карте
- 6. IE 7 смещение увеличивается с увеличением числа детей
- 7. Память приложения NodeJS и ExpressJS увеличивается с увеличением нагрузки
- 8. catalina.out быстро увеличивается, используя Hibernate
- 9. TodoMVC с ember, id не увеличивается
- 10. hibernate ID increment oracle
- 11. Simulink синусоида с увеличением Freqency
- 12. Программно рисуем прямоугольник и линию в Highcharts с увеличением
- 13. проблема с увеличением изображения
- 14. Hibernate nextval get id
- 15. Hibernate Auto Increment ID
- 16. Hibernate 5 id уникальность
- 17. Hibernate второй id
- 18. Hibernate не сгенерирует id
- 19. Linq to SQL insert - ID не увеличивается
- 20. Нарисовать дугу с увеличением радиуса?
- 21. Время, затраченное на цикл в javascript, экспоненциально увеличивается с увеличением числа итераций
- 22. ID auto увеличивается, но не уникально
- 23. СМС не увеличивается. message id is constant
- 24. Hibernate @Id через наследование
- 25. Hibernate ID Generator
- 26. hibernate последняя запись id
- 27. Установка кнопки ID программно
- 28. Java-диаграмма с увеличением координат Y
- 29. Транзакция в секунду не увеличивается с увеличением количества потоков или серверов с использованием WCF
- 30. Последнее вставленное Id в Java Hibernate
http://stackoverflow.com/questions/11788483/hibernate-rundown-on-how-generatedvalue-works – ares
Но это не объясняло на как получить идентификатор программно. – kenn3th
Вам просто нужно добавить аннотацию '@ GeneratedValue' над полем идентификатора, а спящий режим будет автоматически выбирать наиболее подходящий способ генерации идентификаторов. – ares