Гибернация дизайн дилемма;родитель - дочерние отношения с адресной ссылкой - PullRequest
0 голосов
/ 11 октября 2011

У меня есть существующий дизайн объекта.Существует Individual сущность.A Guardian или Minor сохраняются как Individual.Если ura Minor, вам назначено ноль или более опекунов.Это отношение хранится в другом объекте.

Существует дополнительное требование;добавить флаг, чтобы показать, что Guardian Address следует использовать для Minor, если установлена ​​связь.Этот флаг можно снять позже.Если флажок снят, будет использован существующий адрес, и никакие изменения в адресе опекуна не перезапишут адрес несовершеннолетнего.

Отношение между Minor и Guardian сохраняется как

(minor_individual_id, guardian_individual_id, type_of_the_relationship)где type_of_the_relationship может иметь значения, такие как «допустимые» и т. д.

Это так же просто, как добавить новый флаг в таблицу отношений?После добавления адрес несовершеннолетнего должен быть изменен на адрес опекуна.Информация об адресе хранится в другом объекте (Address).Можно ли это сделать с помощью встроенного функционала Hibernate?Или мы должны добавить слой, чтобы заботиться об этой функциональности?Есть ли в Hibernate что-нибудь, что позволяет мне знать, что флаг был обновлен и должен произойти новый набор обновлений?

Адресный объект содержит индивидуальный идентификатор и адрес для индивидуума в одной таблице.

Как только флаг установлен, он может быть установлен только один раз для несовершеннолетнего, так как это приведет к путанице, если у несовершеннолетнего есть несколько опекунов, для которых должен быть включен каскад адресов для каждого из его опекунов.Спасибо.

Структура базы данных: Индивидуальный (Таблица / Организация) Я быВозраст (в зависимости от возраста к вам относятся как к несовершеннолетнему)

GuardianRelationShip (таблица / сущность) Minor_Individual_IdGuardian_Individual_Id

Адрес (таблица / сущность) Individual_IdАдресная строка 1городгосударственный

Если ura Minor с Individual id из 2 и имеют Guardian с Individual id из 1. Это будет выглядеть как

Id Age (Individual)
1   40 Guardian
2    5 Minor

Minor Guardian (GuardianRelationShip)
2     1

IndividualId City State (Address)
1            LA    CA
2            NY    NY

После того, как они связаныИдея состоит в том, что адрес для младшего «индивидуального идентификатора 2» будет изменен на NY / NY.

Если есть требование.что говорит использовать адрес опекуна для несовершеннолетнего и разрешить отмену связи адреса, как бы вы это сделали?

Ответы [ 2 ]

0 голосов
/ 11 октября 2011

Разрешить запись Individual без соответствующей записи Address. Если вы хотите ограничить его только опекунами, разрешите только тот случай, когда запись в таблице Individual не имеет соответствующего соответствия в столбце GuardianRelationship.Minor. Если адрес нулевой, ищите хранителя и используйте этот адрес.

Если вы применяете это правило выше, убедитесь, что вы учитываете крайние случаи, которые изменяют структуру, например, у человека, у которого больше нет зарегистрированного опекуна и нет адреса.

0 голосов
/ 11 октября 2011

У вас есть AddressEntity. Я хотел бы создать IndividualEntity.address, и адрес несовершеннолетнего может ссылаться на тот же AddressEntity, что и один из опекунов (кстати, несколько опекунов тоже могут жить по одному адресу!). После этого вы можете проверить, совпадает ли адрес несовершеннолетнего с адресом опекуна.

Я не понимаю, какую проблему решает флаг. Пожалуйста, предоставьте больше информации вместе с кодом для иллюстрации ваших сущностей и отношений.

...