Разница между «один ко многим», «многие к одному» и «многие ко многим»?

У вас есть несколько вариантов:

  • Сохраните значение HttpContext.Request.Url в статической или членной переменной и используйте это, чтобы передать полный путь.
  • Сохранить домен приложения в настройках приложения в файле web.config.
  • Жестко записать значение.
124
задан Lucky 28 August 2015 в 10:50
поделиться

5 ответов

Один ко многим : у одного человека много навыков, навык не используется повторно между людьми

  • Однонаправленный : человек может напрямую ссылаться на навыки через его Набор
  • Двунаправленный : Каждый "дочерний" Навык имеет единственный указатель обратно на Человек (который не показан в вашем коде)

Многие-ко-многим : один человек имеет много навыков, навык повторно используется между людьми

  • Однонаправленный : человек может напрямую ссылаться Навыки через его Набор
  • Двунаправленный : Навык имеет набор лиц, которые связаны с ним.

В отношениях «один ко многим» один объект является «родительским», а другой - «дочерним». Родитель контролирует существование ребенка. В случае «многие-ко-многим» существование любого типа зависит от чего-то вне их обоих (в более широком контексте приложения).

Ваш предмет (область) должен определять, являются ли отношения отношениями «один-ко-многим» или «многие-ко-многим» - однако я считаю, что создание отношения однонаправленного или двунаправленного - это инженерное решение, которое требует уплаты памяти, обработка, производительность и т. д.

Что может сбивать с толку, так это то, что двунаправленное отношение «многие ко многим» не обязательно должно быть симметричным! То есть группа людей может указать на навык, но навык не обязательно должен относиться только к этим людям. Обычно это так, но такая симметрия не является обязательным требованием.Возьмем, к примеру, любовь - она ​​двунаправленная («Я-люблю», «Любит-меня»), но часто асимметричная («Я люблю ее, но она не любит меня»)!

Все это хорошо поддерживается Hibernate и JPA. Просто помните, что Hibernate или любой другой ORM не заботится о поддержании симметрии при управлении двунаправленными отношениями «многие ко многим» ... это все зависит от приложения.

154
ответ дан 24 November 2019 в 00:26
поделиться

Я объяснил бы что путь:

OneToOne - отношения OneToOne

@OneToOne
Person person;

@OneToOne
Nose nose;

OneToMany - отношения ManyToOne

@OneToMany
List<Shepherd> shepherd;

@ManyToOne
Sheep sheep;

ManyToMany - отношения ManyToMany

@ManyToMany
List<Traveler> traveler;

@ManyToMany
List<Destination> destination;
0
ответ дан 24 November 2019 в 00:26
поделиться

это, вероятно, потребовало бы отношения «многие ко многим», как показано ниже



public class Person{

    private Long personId;
    @manytomany

    private Set skills;
    //Getters and setters
}

public class Skill{
    private Long skillId;
    private String skillName;
    @manyToMany(MappedBy="skills,targetClass="Person")
    private Set persons; // (people would not be a good convenion)
    //Getters and setters
}

вам может потребоваться определить joinTable + JoinColumn, но это будет возможно работать и без ...

1
ответ дан 24 November 2019 в 00:26
поделиться

Посмотрите эту статью: Сопоставление объектных отношений

Существует две категории объектных отношений, которые необходимо учитывать при сопоставлении. Первая категория основана на множественности и включает три типа:

*One-to-one relationships.  This is a relationship where the maximums of each of its multiplicities is one, an example of which is holds relationship between Employee and Position in Figure 11.  An employee holds one and only one position and a position may be held by one employee (some positions go unfilled).
*One-to-many relationships. Also known as a many-to-one relationship, this occurs when the maximum of one multiplicity is one and the other is greater than one.  An example is the works in relationship between Employee and Division.  An employee works in one division and any given division has one or more employees working in it.
*Many-to-many relationships. This is a relationship where the maximum of both multiplicities is greater than one, an example of which is the assigned relationship between Employee and Task.  An employee is assigned one or more tasks and each task is assigned to zero or more employees. 

Вторая категория основана на направленности, и она содержит два типа, однонаправленные отношения и двунаправленные отношения.

*Uni-directional relationships.  A uni-directional relationship when an object knows about the object(s) it is related to but the other object(s) do not know of the original object.  An example of which is the holds relationship between Employee and Position in Figure 11, indicated by the line with an open arrowhead on it.  Employee objects know about the position that they hold, but Position objects do not know which employee holds it (there was no requirement to do so).  As you will soon see, uni-directional relationships are easier to implement than bi-directional relationships.
*Bi-directional relationships.  A bi-directional relationship exists when the objects on both end of the relationship know of each other, an example of which is the works in relationship between Employee and Division.  Employee objects know what division they work in and Division objects know what employees work in them. 
7
ответ дан 24 November 2019 в 00:26
поделиться

Прежде всего прочтите все мелким шрифтом. Обратите внимание, что реляционное сопоставление NHibernate (таким образом, я предполагаю, также и Hibernate) имеет забавное соответствие с отображением DB и графа объектов. Например, отношения «один к одному» часто реализуются как отношения «многие к одному».

Во-вторых, прежде чем мы сможем сказать вам, как вы должны написать карту O / R, мы также должны увидеть вашу БД. В частности, могут ли несколько человек владеть одним Навыком? Если да, то у вас отношения «многие ко многим»; в противном случае - многие к одному.

В-третьих, я предпочитаю не реализовывать отношения «многие ко многим» напрямую, а вместо этого моделировать «таблицу соединений» в вашей модели предметной области, то есть рассматривать ее как объект, например:

class PersonSkill 
{
    Person person;
    Skill skill;    
}

Тогда вы видите что у тебя есть? У вас два отношения "один ко многим". (В этом случае Person может иметь набор PersonSkills, но не иметь набора навыков.) Однако некоторые предпочтут использовать отношение «многие ко многим» (между Person и Skill); это спорно.

В-четвертых, если у вас действительно есть двунаправленные отношения (например, у человека есть не только набор навыков, но также и у навыка есть набор лиц), NHibernate не обеспечивает двунаправленность в вашем BL для ты; он понимает двунаправленность отношений только для целей сохранения.

В-пятых, в NHibernate (и я предполагаю, что Hibernate) гораздо проще правильно использовать «многие-к-одному», чем «один-ко-многим» (отображение коллекций).

Удачи!

0
ответ дан 24 November 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: