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

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

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

В принципе задача решаема, но не совсем автоматически. Нет по-моему в 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
01.08.2006, 10:52
    #33891140
Timm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate + генерация уникального значения
Этот способ в общем то ничем не отличается от триггера...
...
Рейтинг: 0 / 0
01.08.2006, 11:03
    #33891182
pretender
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate + генерация уникального значения
TimmЭтот способ в общем то ничем не отличается от триггера...
Я бы так не сказал.

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

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

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

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

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

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


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