Назад к вопросам
Junior
68
questionbank
Что такое связь один к одному (One to One)?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Связь "один к одному" (One-to-One) в реляционных базах данных описывает отношение между двумя таблицами, где каждая запись в одной таблице может быть связана максимум с одной записью в другой таблице, и наоборот.
Примеры:
- Одна страна имеет одну столицу.
- Один пользователь имеет один профиль пользователя.
Реализация:
- Общий первичный ключ: Обе таблицы используют один и тот же столбец в качестве первичного ключа.
- Внешний ключ: Одна таблица имеет внешний ключ, ссылающийся на первичный ключ другой таблицы, при этом столбец внешнего ключа должен быть уникальным.
В JPA/Hibernate, связь "один к одному" может быть реализована с использованием аннотаций @OneToOne.
Пример с использованием @OneToOne:
// Сущность User
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String username;
@OneToOne(mappedBy = "user", cascade = CascadeType.ALL)
private UserInfo userInfo;
// getters and setters
}
// Сущность UserInfo
@Entity
public class UserInfo {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String address;
@OneToOne
@JoinColumn(name = "user_id") // Внешний ключ в таблице user_info
private User user;
// getters and setters
}
В этом примере:
UserиUserInfoимеют связь "один к одному".- В таблице
UserInfoесть внешний ключuser_id, который ссылается на первичный ключidтаблицыUser. - Используется
mappedByв сущностиUser, чтобы указать на поле в сущностиUserInfo, владеющее связью. cascade = CascadeType.ALLозначает, что операции (сохранение, удаление и т. д.) на родительской сущности будут каскадироваться на связанную сущность.