Перевести в спящий режим отношения "один ко многим" и "многие к одному"

Эти два вопроса ответили на многие из моих вопросов, но я все еще изо всех сил пытаюсь обдумать их в реальном сценарии!

Беру пример из справочников. Предположим, у меня есть один заказ и несколько элементов, связанных с ним. Теперь предположим, что один элемент может иметь один возврат, но один возврат может иметь несколько элементов.

Я понял, Order to Items will be One to Many Relation. Поскольку мне нужно получить порядок элемента, я создам столбец order_fk в таблице элементов, чтобы получить его.

//Order entity
@OneToMany
@JoinColumn(name = "order_fk")
private List<Items> items;

//item entity
@Column(name = "order_fk")
private Long orderId;

Return to Items is One to Many mapping. One Return can have multiple Items. But one Item can have only one return id

//Return entity
@OneToMany
@JoinColumn(name = "return_fk")
private List<Items> items;

//item entity
@Column(name = "return_fk")
private Long returnId;

Я думаю в правильном направлении? Пожалуйста, дайте мне понять эти отношения и однонаправленные / двунаправленные отношения.

В целом, я должен получить товары для заказа. Получить Ордерид данного Предмета. Получите элементы возврата и получите returnId данного элемента.

Ссылка:

  1. Разница между «один ко многим», Многие-к-одному и многие-ко-многим? Hibernate / JPA ManyToOne vs OneToMany

person Reddy    schedule 08.12.2014    source источник
comment
Да, ты прав. Вы можете получить более подробную информацию из Справочника по Hibernate. Когда мы используем @ OneToMany, @ ManyToOne, нам нужно обращать внимание на FetchType, inverse, cascade.   -  person MageXellos    schedule 08.12.2014


Ответы (3)


Это должно быть правильное сопоставление сущностей (таблицы и столбцы базы данных в порядке)

//Order entity
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<Items> items;

//item entity
@ManyToOne
@Column(name = "order_fk")
private Order order;

//Return entity
@OneToMany(mappedBy = "return")
private List<Items> items;

//item entity
@ManyToOne
@Column(name = "return_fk")
private Return return;

cascade = CascadeType.ALL в первом сопоставлении означает, что всякий раз, когда вы сохраняете / обновляете / удаляете заказ, его элементы также будут сохраняться / обновляться / удаляться, поэтому настройте его в соответствии с вашими потребностями и на другом сопоставлении.

Однонаправленные отношения означают, что только одна сторона отношения знает о другой стороне. В ваших примерах, если вы удалили items из Return объекта, у вас будет однонаправленная связь между Item и Return. При наличии items у вас двусторонняя связь.

person Predrag Maric    schedule 08.12.2014

Я думаю, вам следует использовать OneToMany по-другому:

// Order entity
@OneToMany(mappedBy = "columnInItemsPointingAtOrders")
private List<Items> items;

Пожалуйста, проверьте документы: http://docs.oracle.com/javaee/6/api/javax/persistence/OneToMany.html.

И еще одно - вы получаете не идентификаторы, а сущности:

//item entity
@Column(name = "order_fk")
private Order order;
person iozee    schedule 08.12.2014

Я тоже новичок в этой теме. Что помогло мне понять отношения, так это рисование диаграммы EER, а затем ее синхронизация с тестовой БД и эксперименты. Это не ответ на ваш вопрос, но может дать направление.

person Alexander P    schedule 05.01.2015