2017-02-19 12 views
0

Я новый в hibernate я прошел через несколько (1, 2) учебников по hibernate и даже реализовать в моем проекте, я достиг следующего conclusion-Подключенных By: Hibernate

mapped by означает другая сторона объекта владелец

Это просто для точки зрения базы данных, как на самом деле я хочу, чтобы создать отношения корабля в базе данных, в общем mapped by используется, чтобы избежать ненужного стола.

С JAVA точки зрения это не имеет никакого влияния на код, тот же самый код, который работает с mapped by будет вести себя точно же даже убираем mapped by.

Это мое понимание правильное, если нет, можете ли вы объяснить, в каком случае это ведет себя по-другому?

ответ

5

Нет, это не так. mappedBy фактически не имеет ничего общего с базой данных. Он указывает, какая сторона ассоциации является стороной-владельцем, когда ассоциация является двунаправленной. Предположим, что у вас есть связь между Компанией (обратной стороной) и Работником (владельцем). При установлении связи между Google и сортир,

google.addEmployee(john); 

НЕ заставит Hibernate сохранить ассоциацию в базе данных, потому что вы только установить обратную сторону ассоциации.

john.setCompany(google); 

сделает Hibernate сохранением ассоциации в базе данных, поскольку вы устанавливаете сторону владельца ассоциации.

Каждая двунаправленная ассоциация ДОЛЖНА иметь сторону владельца и обратную сторону.

В двунаправленной ассоциации OneToMany сторона владельца ДОЛЖНА быть большой стороной.

+0

Я должен попробовать это самостоятельно, но просто хочу знать в одно мгновение, если я включу каскадирование, чем 'google.addEmployee (john)' будет работать или нет? – TheCurious

+1

Нет. При установке каскада PERSIST, например, сохраняющийся google будет сохраняться в john, но john все равно не будет принадлежать google. –

+0

as u said ** Каждая двунаправленная ассоциация ДОЛЖНА иметь сторону владельца и обратную сторону. ** но я сохранил двунаправленную без «сопоставления», но она просто создала дополнительную таблицу в случае '@ onetomany' и' @ manytomany' и joincolum в обеих таблицах, в случае '@ onetoone'. Это просто лучшая практика для лучшего дизайна db? – TheCurious

0

Понятно, что mappedBy показывает, где находится FK, и как JB Nizet, он показывает, кто является владельцем отношений, который отвечает за управление отношениями.

+0

Он не всегда показывает, где находится FK.Во многих ассоциациях, например, требуется mappedBy, но не относится к тому, где находится FK. Это неверный способ подумать о MappedBy. –