powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate + генерация уникального значения
13 сообщений из 13, страница 1 из 1
Hibernate + генерация уникального значения
    #33887840
victorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Простейшая таблица - первичный ключ и поле с уникальным значением (ну допустим номер накладной). Ключ генерит, а вот что делать с номером накладной. Имею в виду случай, когда приложение в своей работе может использовать любой сервер БД. Не реализовывать же каждый раз триггеры или хранимые процедуры. Может Hibernate сам умеет. Поделитесь - кто сталкивался.....
...
Рейтинг: 0 / 0
Hibernate + генерация уникального значения
    #33888057
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понял, что ты хочешь сделать с номером накладной. Генерить автоинкрементное значение и для него тоже? Или он является первичным ключом? Или тебе нужно гарантировать уникальность?

Подобные вещи могут быть описаны на уровне конфига.

======================
- Я подхожу к клетке с медведем панда...
Видите, какие у него черные круги под глазами?!
Медведь панда как бы всем своим видом говорит нам: "Не бухайте!"
======================
...
Рейтинг: 0 / 0
Hibernate + генерация уникального значения
    #33888125
victorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Автоматически генерировать, ну и естественно уникальное. К первичному ключу это отношение не имеет.
...
Рейтинг: 0 / 0
Hibernate + генерация уникального значения
    #33891092
pretender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема еще актуальна?

В принципе задача решаема, но не совсем автоматически. Нет по-моему в hibernate такой возможности, чтобы на уровне маппинга задать дефалтовое значение для поля и еще чтобы оно было вычисляемым (генерируемым) и уникальным.

Но есть путь немного длиннее (с необходимостью писать java код), но вполне технологичный и проверенный. Описан он в документации по hibernate в главе «Interceptors and events».

Суть подхода в том, что вам нужно создать листенер события создания объекта и в этом листенере как раз и генерировать (любым способом) номер накладной и присваивать полю «номер накладной» это значение.

Осуществляется это в два шага:
1. Создать листенер, в котором будете присваивать номер

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 public   class  CreateListener  extends  DefaultPersistEventListener {
     protected   static  Logger log = Logger.getLogger(CreateListener. class );

     public   void  onPersist(PersistEvent event)  throws  HibernateException {
         super .onPersist(event);
        
        // созданный объект
        Object object = event.getObject();
        // генерируем и присваиваем значение накладной.
    }

2. Привязать листенер к конфигурации:
Код: plaintext
1.
2.
3.
4.
5.
6.
<hibernate-configuration>
    <session-factory>
….
<listener type="create"  class ="somepackage.CreateListener"/>
    </session-factory>
</hibernate-configuration>

Я думаю это лучше чем «…реализовывать каждый раз триггеры или хранимые процедуры». Надеюсь это поможет?
...
Рейтинг: 0 / 0
Hibernate + генерация уникального значения
    #33891140
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот способ в общем то ничем не отличается от триггера...
...
Рейтинг: 0 / 0
Hibernate + генерация уникального значения
    #33891182
pretender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
TimmЭтот способ в общем то ничем не отличается от триггера...
Я бы так не сказал.

1) Триггер придется писать для каждой СУБД свой. А тут есть возможнсоть написать генерацию один раз (на java), и она будте работать для всех поддерживаемых СУБД одинаково;

2) При таком подходе не возникнет никаких дополнительных проблем с обновлением (актуализацией) данныхю. Hibernate будет работать с актуальными данными всегда;

2а) Есть определнные недостатки в случае, когда какие-то изменения проходят черзе Hibernate а какие-то делаются напрямую СУБД. Можно получить проблемы с рассинхронизацией данных.
...
Рейтинг: 0 / 0
Hibernate + генерация уникального значения
    #33891228
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pretender TimmЭтот способ в общем то ничем не отличается от триггера...
Я бы так не сказал.

1) Триггер придется писать для каждой СУБД свой. А тут есть возможнсоть написать генерацию один раз (на java), и она будте работать для всех поддерживаемых СУБД одинаково;

2) При таком подходе не возникнет никаких дополнительных проблем с обновлением (актуализацией) данныхю. Hibernate будет работать с актуальными данными всегда;

2а) Есть определнные недостатки в случае, когда какие-то изменения проходят черзе Hibernate а какие-то делаются напрямую СУБД. Можно получить проблемы с рассинхронизацией данных.
2а очень серьезный аргумент в пользу триггера.
...
Рейтинг: 0 / 0
Hibernate + генерация уникального значения
    #33891346
pretender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Timm
2а очень серьезный аргумент в пользу триггера.
Это аргумент в пользу того, чтобы по возможности не смешивать различные подходы и технологии при создании одного приложения.
...
Рейтинг: 0 / 0
Hibernate + генерация уникального значения
    #33891483
victorp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To pretender. Вы совершенно правильно поняли мою мысль. Создается приложение которое не будет использовать особенности применяемой СУБД.
Для этого Hibernate и используется. Я попробую пойти путем который вы подсказали. Отпишу о результатах чуть позже. Спасибо....
...
Рейтинг: 0 / 0
Hibernate + генерация уникального значения
    #33891552
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
victorpTo pretender. Вы совершенно правильно поняли мою мысль. Создается приложение которое не будет использовать особенности применяемой СУБД.
Для этого Hibernate и используется. Я попробую пойти путем который вы подсказали. Отпишу о результатах чуть позже. Спасибо....
это сказки. либо очень простое CRUD-style приложение.
...
Рейтинг: 0 / 0
Hibernate + генерация уникального значения
    #33891615
pretender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Timm это сказки....
Это не сказки, это давно уже реальность. И, как сказал victorp: "Для этого Hibernate и используется".
...
Рейтинг: 0 / 0
Hibernate + генерация уникального значения
    #33891621
pretender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
victorpОтпишу о результатах чуть позже. Спасибо....
Не за что... Надеюсь получится... Обязательно напишите о результатах. Буду ждать...
...
Рейтинг: 0 / 0
Hibernate + генерация уникального значения
    #33891673
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pretender Timm это сказки....
Это не сказки, это давно уже реальность. И, как сказал victorp: "Для этого Hibernate и используется".
авторTo pretender. Вы совершенно правильно поняли мою мысль. Создается приложение которое не будет использовать особенности применяемой СУБД.
Для этого Hibernate и используется. Я попробую пойти путем который вы подсказали. Отпишу о результатах чуть позже. Спасибо....
в данном случае это еще не реальность
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate + генерация уникального значения
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]