Подтвердить что ты не робот

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;

Есть ли разница?

4b9b3361

Ответ 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.