Назад к вопросам
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 означает, что операции (сохранение, удаление и т. д.) на родительской сущности будут каскадироваться на связанную сущность.