![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Praid |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.5.2010 Репутация: нет Всего: нет |
Как можно получить уникальный id для объекта перед его вствкой в базу данных используя Hibernate, Spring, MySQL?
|
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 5 Всего: 191 |
для каких целей? Если просто вставлять данные с уникальным id, то подойдет традиционный AUTO_INCREMENT
|
|||
|
||||
Praid |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.5.2010 Репутация: нет Всего: нет |
Есть html и в нем нужно разместить ссылки на изображения, т.е нужно знать id этого изображения перед тем как оно будет добавлено в базу. Подробнее: Есть три таблицы 1) News (имеется поле content, которое содрежит html) 2) News_Image 3) Image Все три таблицы связанны между собой, что отражено в hibernate mapping file. Так вот получается что нужно знать id для image до того как будет вызванно сохранение изображения в базу. |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 5 Всего: 191 |
Praid, а если после сохранения получать?
Сохраняешь картинку, получаешь id, затем сохраняешь html с id. |
|||
|
||||
Praid |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.5.2010 Репутация: нет Всего: нет |
Да, думаю что самый приемлемый вариант. Просто идея была в том чтобы сохранять все централизованно, что ли. В объекте News есть поле Set<Image>, тогда при сохранении News hibernate автоматически сохранял бы все. Так же рассматривал возможность собственной генерации уникального id (тэг <generator>), но ничего подходящего не обнаружил, кроме этого Hibernate - Natural Keys, использование составного ключа не катит. Пока буду пробовать твой вариант. Это сообщение отредактировал(а) Praid - 1.4.2012, 13:02 |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 5 Всего: 191 |
Praid, есть еще 2 варианта:
0. Если стоит стратегия генерация id как AUTO. То перед сохранением картинки ты можешь делать запрос в бд на максимальный id. Например вернется тебе 77, значит ты можешь быть уверенным, что следующий будет 78. Если многопоточность не перебьет. ![]() 1.Выбрать свою стратегию генерацию id. В этом случае сам всегда будешь управлять id |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
Тут остается только сохранять объект сущности, а затем извлекать из него сгенерированный id.
Если по каким-то причинам необходимо получить уникальный идентификатор в момент создания сущности, воспользуйтесь UUID. Не обязательно. Если связывать сущности каскадно (например, cascade = { CascadeType.ALL }), то хиб сам позаботиться о проставлении ссылок в момент сохранения сущности в сессию или после коммита транзакции. |
|||
|
||||
Praid |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.5.2010 Репутация: нет Всего: нет |
Это понятно, но в моем случае сложность обработки данных и проектирования существенно возрастает. Поэто очень желателен вариат с упреждающей (до сохранения объекта) генерацией id для сущности image. Так он же строку генерит, id используется в качестве первичного ключа и как потом поиск производить? И какова вероятность того, что он не сгенерит уже существующий id в базе данных? Это сообщение отредактировал(а) Praid - 1.4.2012, 21:32 |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Может, не надо Хибернет использовать? Хибернет для упрощения жизни придуман, но это не значит, что без него нельзя обойтись.
Идея получения id только после сохранения имеет смысл. Если данные успешно сохранились, то получите id. Это подтверждение того, что данные сохранены. Наоборот, если вы сгенерировали id, но еще не сохранили данные, то эта ситуация более сложная. Этот id пока ничему не соответствует. Это сообщение отредактировал(а) COVD - 3.4.2012, 22:22 |
|||
|
||||
Praid |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 11.5.2010 Репутация: нет Всего: нет |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |