Во время изучения JPA может возникнуть вопрос о различиях между аннотациями @JoinColumn
и mappedBy
. Обе эти аннотации используются в связях Один ко Многим (@OneToMany
) и Многие к Одному (@ManyToOne
), и важно понимать, как и когда их использовать.
@JoinColumn
Аннотация @JoinColumn
используется для указания поля или столбца, который будет использоваться для внешнего ключа.
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY) @JoinColumn(name = "companyIdRef", referencedColumnName = "companyId") private List<Branch> branches; ... }
В данном случае, в таблице Branch
будет столбец companyIdRef
, который ссылается на поле companyId
в таблице Company
. Это означает, что на стороне Branch
будет внешний ключ, связывающий его с Company
.
mappedBy
Аннотация mappedBy
используется в двухсторонней связи. Она указывает на поле владельца связи.
@Entity public class Company { @OneToMany(cascade = CascadeType.ALL , fetch = FetchType.LAZY, mappedBy = "companyIdRef") private List<Branch> branches; ... }
В данном случае, mappedBy
указывает, что связь уже была определена в классе Branch
через поле companyIdRef
. Это означает, что в классе Branch
должно быть поле companyIdRef
, которое определяет связь с Company
.
Важно помнить, что mappedBy
не создает столбец внешнего ключа в таблице, а только указывает на владельца связи.
Вывод
Итак, @JoinColumn
и mappedBy
используются для определения разных сторон связи. @JoinColumn
используется для определения внешнего ключа, в то время как mappedBy
используется для указания на владельца связи в двухсторонних связях. Важно правильно использовать эти аннотации, чтобы обеспечить корректное отображение ваших сущностей на таблицы базы данных.
Добавить комментарий