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

Мне непонятно как должны выглядеть Ява-файлы классов 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
22.11.2005, 15:53
    #33392857
N/A
N/A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: вопрос..
Код: 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
22.11.2005, 15:56
    #33392871
Stupid?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: вопрос..
Спасибо. сейчас попробую все это реализовать на своем примере.
...
Рейтинг: 0 / 0
22.11.2005, 17:46
    #33393226
Stupid?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: вопрос..
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
22.11.2005, 17:51
    #33393246
N/A
N/A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: вопрос..
Добавь метод:
Код: plaintext
1.
2.
3.
 public   void  addPerson(Person person){
 people.add(person);
}
...
Рейтинг: 0 / 0
22.11.2005, 18:05
    #33393286
Stupid?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: вопрос..
мм.. хорошо. всеравно непонятно, как все это работает.

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

ad1.addPerson(person1);
//ну добавляется объект в коллекцию, а что дальше?)
...
Рейтинг: 0 / 0
22.11.2005, 18:16
    #33393313
N/A
N/A
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: вопрос..
Все зависит от цели. Например так:
Код: 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
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: вопрос.. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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