Hibernate ManyToOne против OneToOne
Я не вижу никакой разницы в схеме отношений "многие-к-одному" и отношения OneToOne:
@Entity
public class Order {
@ManyToOne
@JoinColumn(nullable = false)
private Address address;
против
@Entity
public class Order {
@OneToOne
@JoinColumn(nullable = false)
private Address address;
Есть ли разница?
Ответы
Ответ 1
Они выглядят точно так же на схеме, но есть разница в Спящем уровне.
Если вы попробуете что-то вроде этого:
Address address = new Address();
Order order1 = new Order();
order1.setAddress(address);
Order order2 = new Order();
order2.setAddress(address);
save();
Все будет в порядке. Но после сохранения, если вы попробуете получить заказ:
@OneToOne case:
org.hibernate.HibernateException: More than one row with the given identifier was found: 1
@ManyToOne case:
SUCCESS
Конечно, ваш класс Address должен выглядеть по-разному в обоих случаях.
Ответ 2
Как правило, должно быть уникальное ограничение на столбец address_id
join в случае ассоциации OneToOne, чтобы гарантировать, что только один заказ может иметь заданный адрес.
Ответ 3
Это указывает на то, что обе стороны отношения лучше всего обслуживаются за счет того же первичного ключа. Это имеет больше смысла таким образом, поскольку обе стороны связаны с одним и только одним порядком в случае отношения @OneToOne
.