один к одному против многих к одному (однонаправленный) - PullRequest
0 голосов
/ 05 ноября 2018

Работодатель имеет несколько сотрудников, поэтому сотрудники имеют (много к одному) отношения со своим работодателем. При условии, что мы игнорируем обратное отношение (один ко многим) от работодателя к работнику, то с точки зрения работника это может быть представлено как отношение один к одному!?

1 Ответ

0 голосов
/ 05 ноября 2018

На первый взгляд это может выглядеть так - вы не получите никаких ошибок при использовании отношения @OneToOne, тогда как на самом деле @ManyToOne и в большинстве случаев hibernate не будет вести себя по-другому поскольку в отношении собственника (сотрудника в вашем примере) он заботится только о себе и об объекте, не являющемся владельцем (работодателе), и ему не нужно знать о своих братьях и сестрах (других сотрудниках), НО @OneToOne имеет дополнительные свойства, которых у @ManyToOne нет, так как он предполагает (видя, что это взаимно-однозначно), что имеет прямую связь с другой стороной отношения:

@OneToOne имеет свойство orphanRemoval, которое позволяет вам удалить другую сторону отношения (работодатель), если владелец (сотрудник) удален - это недоступно с @ManyToOne

Существуют также более прямые различия в уровне Hibernate, когда, если вы ссылаетесь на один и тот же объект, не являющийся владельцем (сотрудник), из разных объектов-владельцев (работодателя) в рамках одной транзакции, вы получите исключение при использовании @OneToOne с отношение, которое должно быть @ManyToOne - см. этот ответ для примера: https://stackoverflow.com/a/18463748/3368558

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...