Связи между Entity
Связь объектов должна отражать связь данных
В реляционной базе сущности часто связаны внешними ключами. В объектной модели удобнее работать не с идентификатором владельца, а непосредственно с объектом владельца. JPA позволяет описать эту связь аннотациями.
Many-to-one — частый случай
@Entity
public class Order {
@Id
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
}
Много заказов могут принадлежать одному пользователю, поэтому со стороны Order
это отношение @ManyToOne.
@JoinColumn указывает столбец внешнего ключа, через который хранится связь.
Основные виды отношений
@OneToOne— одному объекту соответствует один связанный объект;@OneToMany— один объект связан с коллекцией многих объектов;@ManyToOne— многие объекты ссылаются на один;@ManyToMany— коллекции объектов связаны с коллекциями с другой стороны.
У двусторонней связи есть владеющая сторона
@OneToMany(mappedBy = "user")
private List<Order> orders = new ArrayList<>();
mappedBy = "user" показывает, что внешний ключ описан полем user
на другой стороне связи. Это важно: две ссылки в Java не означают два независимых отношения в базе.
Следи за обеими сторонами в объектной модели.
Если связь двусторонняя, полезно менять обе ссылки согласованно, чтобы объекты в памяти не противоречили друг другу.
Проверь себя
Разбор задания
Ментор знает решение и поможет тебе прийти к нему самостоятельно
Войди, чтобы использовать Ментора
Ментор учитывает текущую задачу и историю диалога.
Войти
Проверь важные нюансы и ответ после собственной попытки.
Войди, чтобы посмотреть решение
Решение и разбор доступны после авторизации.
Войти