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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate запросы и маппинг 
:(
    Опции темы
admin82
Дата 17.6.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Сижу уже неделю. Задание следующее:

Есть три таблицы COMPANY, EMPLOYEE, ADDRESS
Отношения между таблицами следующие:

COMPANY  *-* EMPLOYEE

EMPLOYEE  1-1 ADDRESS

COMPANY  1 - * ADDRESS

Вывести в output информацию из базы данных по компаниям + их адреса + количество работников в компаниях.
Например:
COMPANY_NAME       ADRESS1        QUANTITY OF EMPLOYEES
                     ADDRESS2
                     …

Написал такие маппинги: 

Код

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.ss.entity.Address" table="Address">
        <id name="idAddress" column="idAddress">
            <generator class="increment"/>
        </id>
        <property name="city" column = "city"/>
        <property name="street" column = "street"/>
        <property name="build" column = "build"/>
    </class>    
</hibernate-mapping>


Код

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.ss.entity.Company" table="Company">
        <id name="idCompany" column="idCompany">
            <generator class="increment"/>
        </id>
        <property name="name" column="name"/>
    
        <set name="addresses" table="Address" cascade="all" inverse = "true">
            <key column="idCompany" />
            <one-to-many  class="com.epam.ss.Address"/>
        </set>
        
        <set name = "employees" table = "Company_Employee_Link" cascade = "save-update" lazy="true" >
        <key column = "idCompany"/>
        <many-to-many class = "com.ss.entity.Employee" column = "idEmployee"/>
        </set>
        
    </class>
</hibernate-mapping>



<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.ss.entity.Employee" table="Employee">
        <id name="idEmployee" column="idEmployee">
            <generator class="increment"/>
        </id>
        <property name="firstName" column="firstname"/>
        <property name="lastName" column="lastname"/>
        <property name="age" column="age"/>        

        <component name="address" 
        class="com.ss.entity.Address">
        <property name= "build" />
        <property name= "street" />
        <property name= "city" />
        </component>
        </class>
</hibernate-mapping>

Для связи EMPLOYEE  1-1 ADDRESS я использую component, а не one-to-one, т.к. тогда, по-моему, нельзя было бы правильно работать со связью COMPANY  1 - * ADDRESS (ведь тогда ключи формируются зависимыми). Правильно ли это? Меня смущает, что тогда информация типа street, city, build хранится и в таблице Address, и в таблице Employee (для тех адресов, которые соотнесены с работником). А те адреса, которые соотнесены только  с компанией, хранятся только  в таблице Address. 

Ну а дальше вообще темно. таблицы я позаполнял из DatabaseManagerSwing просто вводя SQL. А как надо бы правильно сохранять создаваемые объекты из программы,? Код 
            
Код


   Company comp = new Company("Pupkin & Co");
        Address addr = new Address("Minsk", "Skoriny",81);
        sess.save(addr);
        Set setAddr = new HashSet();
        setAddr.add(addr);
        comp.setAddresses(setAddr);
        sess.save(comp);


создает записи в таблицах Address и Company, но в поле idCompany таблице Address ничего не пишется, т.е. связь то не работает!!!.

И такое непонимание у меня во всем! Уж не говорю о самом задании -- как вывести такую информацию? 



PM MAIL   Вверх
DimW
Дата 21.6.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(admin82 @  17.6.2007,  16:51 Найти цитируемый пост)
но в поле idCompany таблице Address ничего не пишется, т.е. связь то не работает!!!.


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


Цитата(admin82 @  17.6.2007,  16:51 Найти цитируемый пост)
как вывести такую информацию?


селектом в ResaltSet.

и совсем не понятно как организована связь COMPANY  *-* EMPLOYEE, таких ключей в природе не существует.
единственный вариан через третью таблицу.

Это сообщение отредактировал(а) DimW - 21.6.2007, 11:42
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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