![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
barracuda477 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
Юзаю хибернейт.
Есть иерархия классов, сущности записываются "table per class hierarchy" (то есть всю иерархию в одну таблицу). Отличие классов - только в значении самого дискриминатора. Задача - мне нужно изменить значение дискриминатора, чтобы при последующем чтении получить другой класс по изменённой записи. Проблема - при апдейте хибренейт не изменяет значение дискриминатора ни при каких условиях (то есть сгенерированный SQL не содержит изменение поля дискриминатора). Пробовал в том числе создавая сущность другого класса из иерархии и копируюя в неё данные из первой сущности с последующим апдейтом созданной сущности другого класса. Порылся в вебе, есть 2 варианта: 1) удалить старую сущность (удалить запись из таблицы), вставить новую с другим классом 2) выполнить свой update-SQL для апдейта значения дискриминатора вручную Никаких вариантов получше нет? |
|||
|
||||
ecologist |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 452 Регистрация: 28.2.2007 Репутация: 5 Всего: 9 |
1 вариант - наиболее корректный с точки зрения работы с данными. Как я понимаю копируем нужные поля и потом уже удаляем и добавляем.
2 вариант - возможны проблемы из-за кэширования - я бы не рискнул бы его использовать. 3 вариант - вимательнее посмотреть на проектирование - с чего это вдруг надо менять класс объекта. |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Абсолютно согласен. Может просто стоит создать сущность другого типа по образу и подобию и положить в таблицу? а старую можно и грохнуть... to barracuda477 приведите пример логики, в связи с которой возникла такая задача -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
barracuda477 |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 14.12.2008 Репутация: нет Всего: нет |
можно, но primary key в этой таблице является forein key в другой. Как бы не хорошо удалять, cascade пока не стоит, но как-то душа у меня не лежит ![]()
кеширования кем ? СУБД или хибернейтом ? Кеш СУБД тут проапдейтится, для СУБД нет разницы от кого пришел запрос Если имеется ввиду кеш Хибернейта - то Хибернейт должен учитывать, что некоторые запросы могут ити мимо него вообще, то есть совсем с другого клиента.
да, согласен, резонно почему вздумалось менять ? Опишу архитектуру/логику. Есть некие параметры. Они составлены в дерево. Соответсвенно, некоторые параметры абстрактные (узлы дерева) - по ним нет никаких значений. По параметрам-листьям есть значения. Понятно, что в классах параметры со значениями наследуются от абстракных параметров, имея свою логику (например логика проверки значений парамеров, типа параметры попадают в какой-то диапазон и т.д.) Почему нужно менять класс ? Дерево параметров было набито руцями, то есть дискриминаторы были изначально неверно проставлены - захотелось сделать возможность редактировать эти параметры. Но прихожу к выводу что это будет overengineered, т.к. проставить дискриминаторы можно и руцями, а в дальнейшем оно будет совсем-совсем нечасто меняться. |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "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. |