Отказ от ответственности: Я являюсь пользователем спящего режима Java; Я не использовал NHibernate, но я предполагаю, что это очень похоже.
Некоторые псевдокод: Если у вас есть два объекта сущностей, как:
public class EmployeeRelation {
Employee Parent //parent property
Employee Employee //child property
}
public class Employee {
int EmployeeID
...
}
Вы хотите отобразить каждое свойство на EmployeeRelation с помощью отношения многие-к-одному (много EmployeeRelations может указывать на то же самое Наемный рабочий). В hibernate docs подробно описывается информация конфигурации для такого рода отношений.
Затем вы можете сделать (это Java-стиль кода, так что может быть различным для NH):
Criteria c = session.createCriteria(Employee.class);
c.add(Restrictions.eq("EmployeeID", 6357));
Employee myEmployee = (Employee)c.uniqueResult();
Затем, чтобы получить братьев и сестер (все отношения для этого родителя):
c = session.CreateCriteria(EmployeeRelation.class);
c.add(Restrictions.eq("Parent", myEmployee));
List<EmployeeRelation> siblings = (List<EmployeeRelation>)c.uniqueResult();
Это от верхней части головы; вы можете найти более элегантный способ сделать все это в одном запросе, используя, например, HQL. Если каждый сотрудник может иметь только одного родителя, вы также можете посмотреть на сопоставление Employee с коллекцией других объектов Employee и родительской ссылкой Employee вместо использования объекта EmployeeRelation.
HTH!
Есть причина, у вас есть таблица соотношения вместо того, чтобы иметь родительский идентификатор в таблице сотрудников? Просто установите этот идентификатор равным 0 для сотрудников без родителей. Это облегчило бы поиск корня. – Zoidberg
Это существующие таблицы .. Невозможно изменить их – bkhanal