| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Hibernate - Получение id перед insert |
| Автор: Praid 31.3.2012, 23:00 |
| Как можно получить уникальный id для объекта перед его вствкой в базу данных используя Hibernate, Spring, MySQL? |
| Автор: Samotnik 1.4.2012, 09:42 |
| для каких целей? Если просто вставлять данные с уникальным id, то подойдет традиционный AUTO_INCREMENT |
| Автор: Samotnik 1.4.2012, 12:48 |
| Praid, а если после сохранения получать? Сохраняешь картинку, получаешь id, затем сохраняешь html с id. |
| Автор: Praid 1.4.2012, 13:02 | ||
Да, думаю что самый приемлемый вариант. Просто идея была в том чтобы сохранять все централизованно, что ли. В объекте News есть поле Set<Image>, тогда при сохранении News hibernate автоматически сохранял бы все. Так же рассматривал возможность собственной генерации уникального id (тэг <generator>), но ничего подходящего не обнаружил, кроме этого http://www.hibernate-training-guide.com/natural-keys.html, использование составного ключа не катит. Пока буду пробовать твой вариант. |
| Автор: Samotnik 1.4.2012, 13:22 |
| Praid, есть еще 2 варианта: 0. Если стоит стратегия генерация id как AUTO. То перед сохранением картинки ты можешь делать запрос в бд на максимальный id. Например вернется тебе 77, значит ты можешь быть уверенным, что следующий будет 78. Если многопоточность не перебьет. 1.Выбрать свою стратегию генерацию id. В этом случае сам всегда будешь управлять id |
| Автор: Stolzen 1.4.2012, 20:33 | ||
| Тут остается только сохранять объект сущности, а затем извлекать из него сгенерированный id. Если по каким-то причинам необходимо получить уникальный идентификатор в момент создания сущности, воспользуйтесь UUID.
Не обязательно. Если связывать сущности каскадно (например, cascade = { CascadeType.ALL }), то хиб сам позаботиться о проставлении ссылок в момент сохранения сущности в сессию или после коммита транзакции. |
| Автор: Praid 1.4.2012, 21:23 | ||
Это понятно, но в моем случае сложность обработки данных и проектирования существенно возрастает. Поэто очень желателен вариат с упреждающей (до сохранения объекта) генерацией id для сущности image. Так он же строку генерит, id используется в качестве первичного ключа и как потом поиск производить? И какова вероятность того, что он не сгенерит уже существующий id в базе данных? |
| Автор: COVD 3.4.2012, 22:21 |
| Может, не надо Хибернет использовать? Хибернет для упрощения жизни придуман, но это не значит, что без него нельзя обойтись. Идея получения id только после сохранения имеет смысл. Если данные успешно сохранились, то получите id. Это подтверждение того, что данные сохранены. Наоборот, если вы сгенерировали id, но еще не сохранили данные, то эта ситуация более сложная. Этот id пока ничему не соответствует. |
| Автор: Praid 3.4.2012, 22:30 |
Еще как надо, проект большой и в 95% id получается традиционым способом. См. мой пост выше. |