Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate one-to-one, Класс Студент + Класс Адрес 
:(
    Опции темы
Gaudi
Дата 3.5.2010, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 18.3.2007

Репутация: нет
Всего: нет



Совсем простая схема:

таблица Student
(
student_id integer, - primary key
name varchar (100),
lastname varchar(100)
)

таблица Address
(
student_id integer, - primary key
street varchar(100),
dom integer,
kvartira integer
)

связь one-to-one по полю student_id
Код

class Student
{
private int studentId;
private String name;
private String lastName;
private Address address;

getters...
setters...
default c-tor
}


Код

class Address
{
private int studentId;
private String street;
private int dom;
private int kvartira;

getters...
setters...
default c-tor
}


Помогите настроить маппинг <one-to-one>, уже почти сутки бъюсь :(
PM MAIL   Вверх
Vasay
Дата 3.5.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 18
Всего: 73



Gaudi

1. В коде класса Address, должен быть, наверно addressId ?

2. если у Вас нет аннотаций, значит настраиваете через XML. А что ж Вы его тогда не привели? Как мы должны догадываться, где вы что не так настраиваете? Или Вы ждете что Вам тут готовый год напишут?

3. http://lmgtfy.com/?q=hibernate+one+to+one+example    - первый же результат - ваш пример со студентами и адресом.


--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Gaudi
Дата 3.5.2010, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 18.3.2007

Репутация: нет
Всего: нет



1. Нет, именно studentId, связь по первичному ключу

2. Student.hbm.xml
Код


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="logic.Student" table="student">
        <id column="student_id" name="studentId" type="java.lang.Integer">
            <generator class="sequence">
                <param name="sequence">stud_seq</param>
            </generator>
        </id>
        <property column="name" name="name" type="java.lang.String"/>
        <property column="lastname" name="lastname" type="java.lang.String"/>
        
        <one-to-one name="address" class="logic.Address" property-ref="studentId" cascade="all"/>

    </class>
</hibernate-mapping>


Address.hbm.xml

Код

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="logic.Address" table="address">
    /* как описать id, что бы в address значение id бралось из student
        <id name="studentId" type="java.lang.Integer">
            <generator class="foreign">
            ???
            </generator>
        </id>
    */    
        <property column="street" name="street" type="java.lang.String"/>
        <property column="dom" name="dom" type="java.lang.Integer"/>
        <property column="kvartira" name="kvartira" type="java.lang.Integer"/>    

    </class>
</hibernate-mapping>



3. По ссылке связь по  внешнему ключу, мне хотелось бы ассоциацию по первичному

Это сообщение отредактировал(а) Gaudi - 3.5.2010, 17:09
PM MAIL   Вверх
AndrewMormysh
Дата 3.5.2010, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 8.2.2008

Репутация: нет
Всего: 1



что это за связь по первичному ключу? у вас, уважаемый, получается так, что "у Адреса есть Студент"  smile 
PM MAIL   Вверх
Vasay
Дата 3.5.2010, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2097
Регистрация: 8.3.2006

Репутация: 18
Всего: 73



Цитата

 у вас, уважаемый, получается так, что "у Адреса есть Студент" 


Вполне реальная ситуация, если это база общежития, а точность адреса дана до койко-места  smile 


А если серьезно - пример весьма неудачный, ибо в реальной жизни обычно, по одному адресу проживает не один человек.  И более подходящая модель - это "one to many" - когда у студента есть адрес, а у адреса list студентов. 

но, вернемся к one to one. В жизни, связка используется не часто. Если в качестве примера взять упомянутую выше общагу, где есть две таблицы

1.  КойкоМесто  с полями
койкоМесто_id
корпус
этаж
номер комнаты
номер кровати
студент


2. Студент
койкоМесто_id
имя 
фамилия
отчество
......
койкоМесто


Вот в данном случае, так как база у нас общежития, первичен адресс (койко-место), а студенты - вторичны, так как по мере отчисления получения диплома - съезжают, уступая место новым.

Маппинг примерно такой:

Код

<class name="КойкоМесто" dynamic-insert="true" dynamic-update="true">
   <id name="койкоМесто_id">
       <generator class="native"/>
    </id>
......
........
    <one-to-one name="студент" class="Студент" cascade="all" />
 
</class>



Код

<class name="Студент" dynamic-insert="true" dynamic-update="true">
   <id name="койкоМесто_id">
       <generator class="foreign">
          <param name="property">койкоМесто</param>
      </generator>
   </id>
..................
...................
 
   <one-to-one name="койкоМесто" class="КойкоМесто" constrained="true" >
</class>



--------------------
Придумать идеальную защиту от дурака невозможно, дураки, наудивление, изобретательны.
PM MAIL   Вверх
Старовъръ
Дата 7.5.2010, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.5.2008

Репутация: 1
Всего: 10



Кто-нибудь когда-нибудь использовал one-to-one в реальном проекте? Я как-то набил шишку и больше его никогда не использую - заменяю на one-to-many чего и ТС советую smile
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0713 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.