Я видел, что люди используют many-one отображения для представления непосредственных отношений. Я также считал это в книге Gavin King и на статьях.
Например, если у клиента может быть точно один адрес поставки, и адрес поставки может принадлежать только одному клиенту, отображение дано как:
<class name="Customer" table="CUSTOMERS">
...
<many-to-one name="shippingAddress"
class="Address"
column="SHIPPING_ADDRESS_ID"
cascade="save-update"
unique="true"/>
...
</class>
Книга рассуждает как (заключение в кавычки его):
"Вы не заботитесь о том, что находится на целевой стороне ассоциации, таким образом, можно рассматривать ее как к - одна ассоциация без многих отделяется".
Мой вопрос, почему использование many-to-one
и нет one-to-one
? Что это о a one-to-one
это делает это менее желательной опцией к many-to-one
?
Спасибо.
Там есть несколько способов реализовать однозначную связь в базе данных: вы можете поделиться первичным ключом, но вы также можете использовать отношения внешнего ключа с уникальным ограничением (одна таблица имеет столбец внешнего ключа, который ссылается на первичный ключ связанная таблица).
В последнем случае способ отображения в спящем режиме - использовать ассоциацию многие-к-одному
(которая позволяет указать внешний ключ).
Причина проста: вам все равно, что находится на целевой стороне связи , поэтому вы можете относиться к ней как к индивидуальной связи без многие части. Все, что вам нужно, - это выразить «Эта сущность имеет свойство, которое является ссылкой на экземпляр другой сущности» и использовать поле внешнего ключа для {{ 1}} представляют эти отношения.
Другими словами, использование многие-к-одному
- это способ сопоставить взаимно однозначные ассоциации внешних ключей (которые на самом деле могут быть более частыми, чем взаимно-однозначные ассоциации с общим первичным ключом ).
Это даже в официальных документах Hibernate: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/associations.html#assoc-bidirectional-121 .
Это не совсем необоснованно. Конец многие-к-одному говорит: Я сопоставлен через один из моих столбцов с идентификатором -one конца. Вы должны использовать одну и ту же схему базы данных для связи «многие к одному».
Я бы сказал, что проблема в основном связана с объектно-реляционным несоответствием импеданса. Чтобы иметь возможность связать два представления объекта в базе данных, вам необходимо иметь какую-то связь между их таблицами. Однако базе данных известно только отношение 1: N: все остальные являются производными от него.
С реляционными базами данных и объектными языками разработчик должен найти наименее неестественное представление концепции, которую он / она хочет представить (в данном случае отношения 1: 1).