![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
MerlinDeep |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 30.7.2008 Репутация: нет Всего: нет |
Очень нужна помощь по генераторам hebernate.
Ситуация: существует БД на firebird с которой работает клиент писаный на delphi, для генерации значений используются три типа генераторов: 1. максимальный в таблице + 1 (для справочников) 2. генератор на основе sequence - т.е. есть не системная таблица в которой хранятся последние значения ключевых полей, в таблице три поля - имя таблицы для которой происходит генерация, имя поля первичного ключа, последнее значение 3. генераторы с испольованием тригера перед вставкой Сейчас для этой БД пишется клиент на java + hibernate + spring + extjs. Менять логику работы БД нельзя, так как клиент для win 32 должен оставаться рабочим. Подскажите пожалуйста как решить ситуации с генерацией ключей 2. и 3. и если можно с примером ![]() Заранее благодарен за любую информацию и помощь. |
|||
|
||||
MerlinDeep |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 30.7.2008 Репутация: нет Всего: нет |
Удалось разобраться с генератором варианта 3:
оказалось достаточно следующего кода (обезличен):
где GEN_DB_IDFIELD - имя генератора в БД Разбираюсь с вариантом 2 ....... |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Привет.
По пункту 2. Тебе перед инсертом нужно из этой таблицы руками делать выборку и поулченное значение проставлять в поле первичного ключа у сущности. По пункту 3. Так использовать в Hibernate нельзя, поскольку перзистенс контекст ничего не будет знать о значениях, которые проставляются на уровне БД, после того как он закончил свою работу(INSERT, UPDATE, DELETE) Надо придумать какой-то механизм выполнения операции вставки, чтобы все были довольны. А можно ли переделать этот триггер? Чтобы он перед генерацией делал проверку, что поле для генерации IS NULL? Тогда ты на таких таблица сможешь из hibernate использовать люобой способ из первых двух. А Win32 клиент будет продолжать работать в том же духе. Ну в общем, подумайте что и где можно все-таки подвинуть в БД, иначе придеться отказываться от Hibernate -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
MerlinDeep |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 30.7.2008 Репутация: нет Всего: нет |
MisterCleric, спасибо что откликнулись.
Использование второго варианта естественно предпологает проверку на NULL в тригере Так было изначально в базе и менять ничего не пришлось ![]() Как Вы думаете: других проблем не должно быть при таком пользовании генерации? Добавлено через 2 минуты и 13 секунд
хотелось бы получить что-то универсальное, сейчас пытаюсь родить самописный генератор, к сожалению мало примеров в нете :( |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Главное чтобы генерируемое значение бралось из одного места: что триггером, что руками Это сообщение отредактировал(а) MisterCleric - 18.12.2010, 13:12 -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
MerlinDeep |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 30.7.2008 Репутация: нет Всего: нет |
так и есть, получается что для этого случая берется из генераторов firebird |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |