powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / mappedBy hibernate
9 сообщений из 9, страница 1 из 1
mappedBy hibernate
    #37646896
sjinks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, подскажите начинающему девелоперу, для чего применяется параметр mappedBy в аннотациях отношений.
Например: @OneToMany(mappedBy="some_name")
Thnx!
...
Рейтинг: 0 / 0
mappedBy hibernate
    #37646909
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Google -> "hibernate onetomany mappedby"
...
Рейтинг: 0 / 0
mappedBy hibernate
    #37646944
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sjinks,
для обозначения двунаправленных связей и оптимизации запросов. Т.к. программирует от БД и её структуры, то в БД нет таких связей.
Сухой остаток - пока, на данном этапе, не используй и не забивай голову.
...
Рейтинг: 0 / 0
mappedBy hibernate
    #37646956
sjinks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, большое спасибо!
...
Рейтинг: 0 / 0
mappedBy hibernate
    #37646987
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sjinksPetro123, большое спасибо!Вам совет - посты Petro123 лучше игнорировать, ибо то, что он вам сказал - абсолютно неверно.
Почему неверно? Да потому что использование mappedBy обяхательно для правильного создания двунаправленных отношений. Что такое двунаправленное отношение понимаете? Это, например, когда у нас есть Сотрундик и есть Отдел, они относятся как многие-к-одному. Соответственно, если вы хотите иметь возможность перейти от сотрудника к его отделу и наоборот - от отдела к списку его сотрудников, то вам необходимо создать двунаправленное отношение. Примерно так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class Employee {
    @ManyToOne
    @JoinColumn(name="department_fk")
    private Department depratment;
}
public class Department {
    @OneToMany(mappedBy="department")
    private Set<Employee> employees;
}

Это классический пример правильного использования аннотация длс создания двунаправленного отношения, в котором owner'ом отношения является Employee.
Если же вы последуете "совету" Petro123 и не укажите mappedBy, то владельцем отношения будет Department и код будет выглядеть примерно так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class Employee {
    @ManyToOne
    @JoinColumn(name="department_fk", insertable=false, updatable=false)
    private Department depratment;
}
public class Department {
    @OneToMany
    @JoinColumn(name="department_fk") 
    private Set<Employee> employees;
}

Во-первых, это более громоздко, во-вторых - самое главное - Хибер в этом случае будет плодить дополнительные запросы при внесении обновлений в сущности. Потому всегда надо придерживаться первого варианта с mappedBy.
Еще раз повторюсь - лучший помощник программиста это Google, вся инфа и вся решения там.
...
Рейтинг: 0 / 0
mappedBy hibernate
    #37647014
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аффтар. Срочно поблагодари svenom. Я еле сумел его самого отправить гугл:)
...
Рейтинг: 0 / 0
mappedBy hibernate
    #37647184
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomsjinksPetro123, большое спасибо!Вам совет - посты Petro123 лучше игнорировать
+1
...
Рейтинг: 0 / 0
mappedBy hibernate
    #37647189
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonidvsvenomпропущено...
Вам совет - посты Petro123 лучше игнорировать
+1
не замусоривай тему, чтобы модератора не звать.
со svenom я позже с примером и кодом поговорю. То что можно ему, нельзя тебе. Ты тут посторонний.
:)
...
Рейтинг: 0 / 0
mappedBy hibernate
    #37647234
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Аффтар, вам повезло, что я заинтересовался этой темой.
Мы разберём её до косточек без всякого гугла

ВИ №1 Маппинг на готовую СУБД структуру
===================================
- идём в гугл за примером, как тут советовали
http://www.spring-source.ru/docs_simple.php?type=manual&theme=docs_simple&docs_simple=chap04_p03
- создаём 2 таблички в БД Продукт и Ставка
ЗЫ. Рассматриваем только отношение Продукт это - Справочник

Bid-Ставка (справочник)id продукт(item_id) Name1 34 Afgfef2 6 Ddf3 7 Kkk

Item-Продуктid Name34 Сахар6 Картошка7 Наркотик
- тут все говорят, что проектируем ОТ БД, тогда маппинг равен:
- пишем 2 класса

Код: java
1.
2.
3.
4.
5.
6.
public class Bid{
  @ManyToOne
  @JoinColumn(name="Справочник_ID") FK //можно не указывать
  private Item item
  private Name
}



Код: java
1.
2.
3.
public class Item{
  private Name
}


- всё маппинг закончен. Или лучше с вопросом к профи: "Маппинг закончен?"
Т.е. дальше начинаются хинты для СУБД'шников чтобы облегчить запросы для СУБД.
Или 2-х направленные связи чтобы облегчить запросы Хиберу. Что и сказал svenom и я :)

Например, если мне надо будет найти Bid для определённого Item в СУБД. Я сделаю это запросом.
НО НЕ РАНЬШЕ чем мне это понадобится.

Дам 2 ссылки из статьи тем кто любит думать , или программистам с Большой буквы.
автор.......
Hibernate, как и другая ORM реализация, не понимают двунаправленной связи
..........
Если мы делаем двунаправленные связи, то двунаправленностю нам нужно управлять самим.
Это был честный ВИ, выводы делать только Вам (с)
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / mappedBy hibernate
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]