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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate, проблема с хибернетовской философией 
V
    Опции темы
PovAnd
Дата 19.9.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот такая проблема. У меня есть класс, я с помощью мэпа отображаю его в таблицу БД, все классно. Но если мне нужно отобразить один и тот же класс на две таблицы. Может ли кто предложить вариант такого отображения?
PM MAIL   Вверх
AntonSaburov
Дата 19.9.2007, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Посмотри главу в доке - 9.1.4. Mixing table per class hierarchy with table per subclass

Т.е. можно создать класс, который будет мапится на одну таблицу, а потом создать потомка, который приджойнится на вторую.

Вот XML

Код

<class name="Payment" table="PAYMENT">
    <id name="id" type="long" column="PAYMENT_ID">
        <generator class="native"/>
    </id>
    <discriminator column="PAYMENT_TYPE" type="string"/>
    <property name="amount" column="AMOUNT"/>
    ...
    <subclass name="CreditCardPayment" discriminator-value="CREDIT">
        <join table="CREDIT_PAYMENT">
            <property name="creditCardType" column="CCTYPE"/>
            ...
        </join>
    </subclass>
    <subclass name="CashPayment" discriminator-value="CASH">
        ...
    </subclass>
    <subclass name="ChequePayment" discriminator-value="CHEQUE">
        ...
    </subclass>
</class>

PM MAIL WWW ICQ   Вверх
Alexis
Дата 19.9.2007, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 14.8.2006
Где: Казань

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



Цитата(PovAnd @  19.9.2007,  16:49 Найти цитируемый пост)
Но если мне нужно отобразить один и тот же класс на две таблицы.

Нужно просто в маппинге указать entity-name. И спокойно написать два маппинга на разные таблицы, класс будет один, а entity-name разные.

Это сообщение отредактировал(а) Alexis - 19.9.2007, 16:13
PM   Вверх
AntonSaburov
Дата 19.9.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Цитата(Alexis @  19.9.2007,  16:07 Найти цитируемый пост)
Нужно просто в маппинге указать entity-name. 

А можно пример записи - а то что-то не укладывается в голове - самому стало интересно.
PM MAIL WWW ICQ   Вверх
PovAnd
Дата 19.9.2007, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Дейчтвительно, есть еще аттрибут entity-name и он по умолчанию такой же как имя класса, его нужно просто выстовлять оригинальным и тогда все Ок!

Код

    <class name="ObjectEntity" table="ENTIY" entity-name="ObjectEntity">
        <id name="id" column="ID" type="long" unsaved-value="0">
            <generator class="native" />
        </id>

        <many-to-one name="type" column="TYPE_ID" class="Type" entity-name="Type"
            not-null="true" />
    </class>


Спасибо за помощь.
PM MAIL   Вверх
Alexis
Дата 19.9.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 14.8.2006
Где: Казань

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



Цитата(AntonSaburov @  19.9.2007,  17:16 Найти цитируемый пост)
А можно пример записи - а то что-то не укладывается в голове - самому стало интересно. 

Пока ответ набирал уже пример привели. Вот цитата из документации:

http://www.hibernate.org/hib_docs/referenc...claration-class
entity-name (optional, defaults to the class name): Hibernate3 allows a class to be mapped multiple times (to different tables, potentially), and allows entity mappings that are represented by Maps or XML at the Java level. In these cases, you should provide an explicit arbitrary name for the entity. See Section 4.4, “Dynamic models” and Chapter 18, XML Mapping  for more information.


PM   Вверх
AntonSaburov
Дата 19.9.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Цитата(Alexis @  19.9.2007,  16:33 Найти цитируемый пост)
Пока ответ набирал уже пример привели. Вот цитата из документации:

Ну и что дальше ? Я что-то пытаюсь сделать - и не могу. Может просто не увидеть - бывает smile
PM MAIL WWW ICQ   Вверх
Alexis
Дата 19.9.2007, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 14.8.2006
Где: Казань

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



Цитата(AntonSaburov @  19.9.2007,  17:51 Найти цитируемый пост)
Ну и что дальше ? Я что-то пытаюсь сделать - и не могу. Может просто не увидеть - бывает smile 

Извиняюсь, похоже, что вы меня неверно поняли. Я написал о том, что пока я набирал пример использования, PovAnd уже успел привести пример, да еще и проверить его работоспособность.
PM   Вверх
AntonSaburov
Дата 19.9.2007, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Цитата(Alexis @  19.9.2007,  17:04 Найти цитируемый пост)
PovAnd уже успел привести пример, да еще и проверить его работоспособность. 

Да я понимаю - я просто не вижу вывода - ну есть у меня две таблицы Table1 и Table2 с полями ID, Name1 и ID, Name2

Ну и как мне описать класс TableClass в xml ? Поля соответсвенно ID, Name1, Name2

Код

    <class name="TableClass" table="Table1" entity-name="TableEntity">
        <id name="id" column="ID" type="long" unsaved-value="0">
            <generator class="native" />
        </id>
        <property name="Name1" column="Name1"/>

// И что тут дальше писать ?

    </class>

PM MAIL WWW ICQ   Вверх
Alexis
Дата 19.9.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 14.8.2006
Где: Казань

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



Цитата(AntonSaburov @  19.9.2007,  18:10 Найти цитируемый пост)
// И что тут дальше писать ?

Здесь ничего писать не надо. Нужно отдельно добавить еще один класс, только с другим entity-name, например:
Код

<class name="TableClass" table="Table2" entity-name="AnotherTableEntity">
        <id name="id" column="ID" type="long" unsaved-value="0">
            <generator class="native" />
        </id>
        <property name="Name1" column="Name1"/>
</class>

Можно вообще entity-name не указывать, поскольку по-умолчанию это имя берется как имя класса.

Только вот ссылку нашел интересную:
http://www.nabble.com/Mapping-class-to-mul...)-t3425474.html
оказывается, это с аннотациями не работает.

Это сообщение отредактировал(а) Alexis - 19.9.2007, 17:21
PM   Вверх
AntonSaburov
Дата 19.9.2007, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



А-а-а-а-а. Въехал. Спасибо большое.
PM MAIL WWW 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.0534 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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