КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Навигация по связям
Идентификация (Identity) В БД строки отличаются друг от друга по значению первичного ключа, таким образом не может существовать двух строк с одним и тем де значением первичного ключа. С объектами в памяти всё обстоит иначе. Несколько объектов в памяти могут представлять одну и туже сущность БД – например одного и того де пользователя. Одна строка в БД может быть представлена несколькими копиями объекта в памяти объектной модели. Это приводит к тому, что резко осложняется возможность однозначной идентификации актуальной копии объекта в памяти. Так несколько копий объекта могут использоваться и даже обновляться в параллельных потоках. Для идентификации объектов часто используют понятие равенство по значению (value-equals), в отличие от механизма по умолчанию – равенство по ссылке (reference-equals). В Java для этого достаточно переопределить методы equals() и hashCode(). Так, например, два объекта типа User будут одинаковы тогда, когда значение поля username у них совпадает. При этом предполагается что, по бизнесу, поле username уникальное в системе – т.е. является естественным ключом. ORM должен прозрачно поддерживать отображения одной строки на несколько копий объекта в памяти виртуальной машины, уметь определять устаревшие версии объектов и синхронизовать состояния объектов с нижележащей БД.
Для навигации по связям, объекты содержат ссылки друг на друга или ссылки на коллекции подчинённых объектов. Если необходимо получить ссылку на объект используя тукущий объект, например, имея ссылку на объект типа User, перейти по ссылке к соответствующему объекту типа Address в java достаточно воспользоваться простой конструкцией: user.getHomeAddress()
При этом, объект типа Address может сохранять своё состояние в отдельной таблице таблице СУБД и ORM должен прозрачно при обращении загрузить соответствующий объект и инициализировать его. При реализации подобного механизма вручную необходимо писать огромное количество кода, отвечающего за правильную обработку связей по внешним ключам (foreign-key) и т.п. Эта проблема является принципиальной, так как данные в реляционной модели представляются набором отношений и связями между ними, в то время как данные в объектной модели, как правило, при правильном проектировании, в чисто виде отсутствуют. Вместо них предметная область, в своём некторором состоянии представлена графом объектов, связанных между собой, каждый из которых может иметь трибуты состояние. Вообще говоря состояние объектной модели будет в данном случае задаваться внутренним состоянием каждого экземпляра объекта (не класса!!) и связями (на некоторый конкретный момент) между экземплярами объектов. (Заметим, что состав и связь меджу классами (не объектами!! – для пояснения различия между понятием класс и объект рекомендуется обращаться к первым лекциями или к [2]) отражают статическую модель предметной области).
Дата добавления: 2014-01-05; Просмотров: 305; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |