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