У меня есть следующая объектная модель:
class ObjectA{
public string Description {get;set;}
}
class ObjectB{
public string Description {get;set;}
public ObjectA A {get;set;}
}
class ObjectC{
public string Description {get;set;}
public ObjectB B {get;set;}
}
class ObjectD{
public string Description {get;set;}
public ObjectC C {get;set;}
public ObjectA A {get;set;}
}
Мои таблицы таковы:
A: ID (int), ОПИСАНИЕ (строка)
B: ID (int), ОПИСАНИЕ (строка), A_ID (int)
C: ID (int), ОПИСАНИЕ (строка), B_ID (int)
D: ID (int), ОПИСАНИЕ (строка), C_ID (int), A_ID (int)
В таблице D A_ID - это внешний ключ первичного ключа таблицы A. Первоначально это было сделано для того, чтобы вы могли легко получить доступ к ObjectA
из ObjectD
: ObjectD.A
. Это приводит к необходимости добавления идентификатора из таблицы A в каждую таблицу, которая хочет получить доступ к ObjectA
, таким образом, нормализуя базу данных (представьте, что у вас есть ObjectE
и ObjectF
, к которым все хотят легко получить доступ ObjectA
). В этом случае ObjectB
всегда будет иметь ссылку на ObjectA
.
Я хотел бы избавиться от ссылки на A_ID во всех моих таблицах, но я хочу иметь возможность легко получить доступ к ObjectA
из моих классов. Я знаю, что могу сделать ObjectD.ObjectC.ObjectB.ObjectA
, чтобы получить ObjectA
, когда это необходимо, но это, кажется, лишает цели ленивой загрузки моих объектов.
Как я могу сопоставить свой ObjectD
, чтобы иметь прямой доступ к ObjectA
без идентификатора ObjectA
в таблице ObjectD
?
Примечание: Я использую файлы hbm / xml для сопоставления своих классов.