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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate - автоматическое создание объекта 
V
    Опции темы
iluvatar
Дата 1.4.2008, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Здравствуйте. 
Есть таблицы, скажем Person и PersonInfo

Person
Код

  id
  nickname
  e-mail
  personInfo_id


PersonInfo
Код

  id
  name
  lastname
  city
  country


Хочется, чтобы при создании и сохранении нового персона, создавалась и сохранялась новая запись personInfo. Как реализовать mapping?
Т.е. я создаю экземпляр person. Говорю person.setPersonInfo(new PersonInfo()), и вызываю PersonDAO.save(person). 



PM MAIL ICQ   Вверх
Llucas
Дата 1.4.2008, 16:21 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


J2EE Developer
*


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

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



В mapping нужно установить -  lazy = "true" Ну и конечно связать эти таблицы в меппинге.
PM MAIL WWW   Вверх
iluvatar
Дата 1.4.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Llucas @ 1.4.2008,  16:21)
В mapping нужно установить -  lazy = "true" Ну и конечно связать эти таблицы в меппинге.

Насколько я знаю lazy влияет только на получение объекта из БД. 
Пишу такой меппинг:

<many-to-one name="personInfo" insert="true" update="true" cascade="all" column="personInfo_id" not-null="false"/>

выдает HibernateException при вызове save
PM MAIL ICQ   Вверх
Llucas
Дата 1.4.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


J2EE Developer
*


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

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



Попробуй cascade="save-update"

А почему связь many-to-one? Напиши trace эксепшена...
PM MAIL WWW   Вверх
iluvatar
Дата 2.4.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хм... Теперь возникла другая проблема - генерация значения id.
Обычно есть некая sequence и у нее берется nextval.
Проблема в том, что сгенерированный id должен быть результатом хранимой процедуры. Как это замепить? Чет не соображу.
PM MAIL ICQ   Вверх
Llucas
Дата 3.4.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


J2EE Developer
*


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

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



Аннотация для xdoclet 

 
Код

/**
     *      Generator should be changed to the following:
     * @hibernate.id generator-class = "sequence"
     * @hibernate.generator-param name = "sequence" value = "name_seq"
     */


или *.hbm.xml

 
Код

<id
            name="id"
            column="id"
            type="java.lang.Integer"
        >
            <generator class="sequence">
                <param name="sequence">blank_seq</param>          
            </generator>
        </id>


Это сообщение отредактировал(а) Llucas - 3.4.2008, 17:05
PM MAIL WWW   Вверх
iluvatar
Дата 7.4.2008, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так это просто последовательность. Т.е. при генерации нового id будет вызван blank_seq.nextval. Мне же нужно получить результат хранимой процедуры, например genMyId.
PM MAIL ICQ   Вверх
Llucas
Дата 7.4.2008, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


J2EE Developer
*


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

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



Если ты хочешь получить следующее значение sequence которое будет присвоено новой строке, то насколько мне известно, сделать это не получится, потому как nextval у sequence возвращает следующее значение id и при этом тут же инкрементирует счетчик...
PM MAIL WWW   Вверх
iluvatar
Дата 7.4.2008, 10:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



объясню на пальцах - есть таблица person, есть person_seq, есть хранимая процедура genPersonId.
genPersonId берет значение person_seq.nextval и умножает на 2.
То есть, при создании нового перца, его id это не просто значение person_seq.nextval, а удвоенное значение.
Как замепить генератор id на результат, возвращаемой хранимой функцией?

P.S. Умножение id на 2 это для примера. В дествительности алгоритм намного сложней.
PM MAIL ICQ   Вверх
AlexeyVorotnikov
Дата 7.4.2008, 11:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

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



Может, написать собственный IdentifierGenerator?


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
iluvatar
Дата 7.4.2008, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



не хочется дублировать алгоритм, который уже есть в БД.
PM MAIL ICQ   Вверх
AlexeyVorotnikov
Дата 8.4.2008, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

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



Так IdentifierGenerator ничего не будет дублировать, он будет просто вызывать процедуру из БД.


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
iluvatar
Дата 8.4.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



 smile , если не сложно

хочется сделать так:
Код

<generator class="myClass">
  <param name="functionName">myFunction</param>
</generator>


А вот как в myClass получить результат хранимой функции myFunction?

Это сообщение отредактировал(а) iluvatar - 9.4.2008, 10:07
PM MAIL ICQ   Вверх
iluvatar
Дата 9.4.2008, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



up
PM MAIL ICQ   Вверх
AlexeyVorotnikov
Дата 9.4.2008, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 18.6.2007
Где: Москва

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



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


--------------------
RTFM!
Три источника и три составные части Java: The Java Language Specification, Java Platform API Specification, The Java Virtual Machine Specification
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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