«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как MappedBy облегчает двунаправленные отношения в JPA и Hibernate?

Как MappedBy облегчает двунаправленные отношения в JPA и Hibernate?

Опубликовано 17 ноября 2024 г.
Просматривать:681

How Does `MappedBy` Facilitate Bidirectional Relationships in JPA and Hibernate?

Понимание MappedBy в JPA и Hibernate

В средах объектно-реляционного сопоставления (ORM), таких как JPA и Hibernate, MappedBy является полезной аннотацией для установление двунаправленных связей между классами сущностей. Эта аннотация используется в контексте отношений «один-ко-многим» и «многие-к-одному».

Рекомендуемое использование

Рекомендуемое использование MappedBy выглядит следующим образом:

  • Отношения «один-ко-многим»: В отношениях «один-ко-многим» сторона отношения «многие» (сторона с коллекцией) должна иметь MappedBy аннотация. Эта аннотация указывает имя поля на стороне «один» отношения, которое содержит ограничение внешнего ключа.
  • Отношения «многие к одному»: В отношениях «многие к одному» отношения, «одна» сторона отношения (сторона с одним ссылающимся объектом) должна иметь аннотацию MappedBy. Эта аннотация указывает имя поля на стороне «многие» отношения, которое содержит ограничение внешнего ключа.

Цель MappedBy

MappedBy служит несколько целей:

  • Двунаправленный обход: В двунаправленных отношениях MappedBy позволяет пересекать отношения в обоих направлениях без необходимости явного определения внешнего ключа в обеих таблицах.
  • Оптимизация: Указав владельца связи, MappedBy может оптимизировать производительность базы данных, избегая ненужных таблиц соединений или ограничений внешнего ключа.

Пример

В приведенном вами примере авиакомпания, владеющая множеством AirlineFlights и AirlineFlights, принадлежащими одной авиакомпании, MappedBy должна использоваться в классе AirlineFlight следующим образом:

@Entity
@Table(name="AirlineFlight")
public class AirlineFlight {
    // ... other attributes ...

    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="IDAIRLINE", nullable=false)
    @MapsId
    private Airline airline;
    // ... other attributes ...
}

В этом примере аннотация @MapsId указывает, что поле IDAIRLINE в AirlineFlight используется в качестве ограничения внешнего ключа для сущности Airline. Используя здесь MappedBy, вы можете установить двунаправленную связь между Airline и AirlineFlight без необходимости ограничений внешнего ключа в обеих таблицах.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3