Прежде всего, прочитайте все мелким шрифтом. Обратите внимание, что реляционное отображение NHibernate (то есть, я полагаю, и Hibernate) имеет забавное соответствие с отображением БД и графов объектов. Например, отношения один-к-одному часто реализуются как отношения многие-к-одному.
Во-вторых, прежде чем мы сможем рассказать вам, как вы должны написать свою карту O / R, мы также должны увидеть вашу БД. В частности, может ли один навык обладать несколькими людьми? Если это так, у вас есть отношения многие ко многим; в противном случае, многие к одному.
В-третьих, я предпочитаю не реализовывать отношения «многие ко многим» напрямую, а вместо этого смоделировать «таблицу соединений» в модели вашего домена, т. Е. Трактовать ее как сущность, например:
class PersonSkill
{
Person person;
Skill skill;
}
Тогда ты видишь, что у тебя есть? У вас есть два отношения один ко многим. (В этом случае Person может иметь коллекцию PersonSkills, но не иметь коллекцию Skills.) Однако некоторые предпочтут использовать отношение «многие ко многим» (между Person и Skill); это спорно.
В-четвертых, если у вас есть двунаправленные отношения (например, у Человека есть не только коллекция навыков, но и у навыка есть коллекция людей), NHibernate не обеспечивает двунаправленность в вашем BL для вы; он понимает только двунаправленность отношений в постоянных целях.
В-пятых, многие в одном намного проще правильно использовать в NHibernate (и я предполагаю, что Hibernate), чем один в несколько (отображение коллекций).
Удачи!