powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: вопрос..
9 сообщений из 9, страница 1 из 1
Hibernate: вопрос..
    #33392484
Stupid?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ниже встален кусок из доков Хибернейта, который показывает организацию двусторонней связи "один ко многим".

Мне непонятно как должны выглядеть Ява-файлы классов Person и Adress, как будет осуществляться работа с объектами этих классов.

Буду очень признателен за объяснение/демнонстрацию, или просто за ответ на вопрос, выделенный мною во вставке

7.4.1. one to many / many to one

A bidirectional many-to-one association is the most common kind of association. (This is the standard parent/child relationship.)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <many-to-one name="address" 
        column="addressId"
        not-null="true"/>
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
    <set name="people" inverse="true"> <!--как это свойство должно выглядеть в файле  Adress.java?..-->
        <key column="addressId"/>
        <one-to-many class="Person"/>
    </set>
</class>
create table Person ( personId bigint not null primary key, addressId bigint not null )
create table Address ( addressId bigint not null primary key )


If you use a List (or other indexed collection) you need to set the key column of the foreign key to not null, and let Hibernate manage the association from the collections side to maintain the index of each element (making the other side virtually inverse by setting update="false" and insert="false"):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<class name="Person">
   <id name="id"/>
   ...
   <many-to-one name="address"
      column="addressId"
      not-null="true"
      insert="false"
      update="false"/>
</class>

<class name="Address">
   <id name="id"/>
   ...
   <list name="people"> <!--как это свойство должно выглядеть в файле  Adress.java?..-->
      <key column="addressId" not-null="true"/>
      <list-index column="peopleIdx"/>
      <one-to-many class="Person"/>
   </list>
</class>
...
Рейтинг: 0 / 0
Hibernate: вопрос..
    #33392857
N/A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
N/A
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 public   class  Address{
...
  private  Set<Person> people=  new  HashSet<Person>();

  public  Set<Person> getPeople(){
   return  Collections.unmodifiableSet(people);
}
}

Добавил прямой доступ (access="field").

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
< class  name="Person">
    <id name="id" column="personId">
        <generator  class ="native"/>
    </id>
    <many-to-one name="address" 
        column="addressId"
        not- null ="true"/>
</ class >

< class  name="Address">
    <id name="id" column="addressId">
        <generator  class ="native"/>
    </id>
    <set name="people" inverse="true" access="field">
        <key column="addressId"/>
        <one-to-many  class ="Person"/>
    </set>
</ class >
...
Рейтинг: 0 / 0
Hibernate: вопрос..
    #33392871
Stupid?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. сейчас попробую все это реализовать на своем примере.
...
Рейтинг: 0 / 0
Hibernate: вопрос..
    #33393226
Stupid?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
N/A[src java]public class Address{
...
private Set<Person> people= new HashSet<Person>();

public Set<Person> getPeople(){
return Collections.unmodifiableSet(people);
}
}

public Set<Person> getPeople(){
return Collections.unmodifiableSet(people);
}
а как же добавлять объекты в коллекцию?..
возможно,

public Set<Person> getPeople(){
return people;
}

?..
...
Рейтинг: 0 / 0
Hibernate: вопрос..
    #33393246
N/A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
N/A
Гость
Добавь метод:
Код: plaintext
1.
2.
3.
 public   void  addPerson(Person person){
 people.add(person);
}
...
Рейтинг: 0 / 0
Hibernate: вопрос..
    #33393286
Stupid?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мм.. хорошо. всеравно непонятно, как все это работает.

в таблице Person есть поле "AdressId", однако, добавляя объект Adress adress1 в set people, я никак не меняю ни одну из таблиц. в чем смысл?..
...
Рейтинг: 0 / 0
Hibernate: вопрос..
    #33393297
N/A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
N/A
Гость
В объектах и OOP подходе.
И по классике OOP != ER (table oriented programming)
...
Рейтинг: 0 / 0
Hibernate: вопрос..
    #33393301
Stupid?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Adress ad1 = new Adress();
Person person1 = new Person()
Person1.SetAdress(ad1);
//теперь в таблице Person для записи person1 уже стоит adressId

ad1.addPerson(person1);
//ну добавляется объект в коллекцию, а что дальше?)
...
Рейтинг: 0 / 0
Hibernate: вопрос..
    #33393313
N/A
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
N/A
Гость
Все зависит от цели. Например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
// sessionFactory was initialized

Session s = sessionFactory.getSession();
Transaction tran =  null ;
 try {
 tran = s.beginTransaction();
 s.saveOrUpdate(ad1);
 tran.commit();
} catch (HibernateException ex){
  if  (tran !=  null ){
  tran.rollback();
 }
}
 finally {
 s.close();
}
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: вопрос..
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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