Кто владелец связи
Вопрос
В двунаправленной связи Order.items (@OneToMany(mappedBy = "order")) и Item.order (@ManyToOne) добавили позицию только в коллекцию: order.getItems().add(item), не выставив item.setOrder(order). Что сохранится в колонке item.order_id?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- id заказа: Hibernate сам синхронизирует обе стороны связи
- null: внешний ключ пишет владелец связи, то есть Item.orderправильный ответ
- Будет исключение при коммите о несогласованных сторонах связи
- Hibernate создаст отдельную таблицу связи order_items
Разбор
mappedBy означает «эта сторона только отражение». Внешний ключ берётся из поля владельца, Item.order, а оно null. Hibernate стороны не синхронизирует и об ошибке не сообщает. Поэтому в сущности пишут вспомогательный метод addItem(item), который выставляет обе стороны. Таблица связи появилась бы при однонаправленном @OneToMany без mappedBy и @JoinColumn.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.