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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавить новое поле в EntityBean, обновится-ли структура БД? 
:(
    Опции темы
kaa
Дата 21.12.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Всем доброго времени суток!

Изучая EntityBean задался таким вопросом:

Пусть существует некий объект Entity-бина с неким набором полей.
Пусть выбран вариант с Container-Persistence Management.
Если мне понадобиться ввести новое поле и я сделаю это в коде, как эти изменения отобразятся на БД? Обновит ли контейнер структуру БД автоматом или что-то непоправимое случится?


Всем заранее спасибо!

ЗЫ: гуглил - ненашел :(

Это сообщение отредактировал(а) kaa - 21.12.2008, 16:38
PM MAIL   Вверх
kaa
Дата 22.12.2008, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Проверил - ессно валится с ексепшеном.


Может быть опытные товарищи подскажут, как поступают в случаях, когда структура бина (а значит и таблицы) требует обновления?
PM MAIL   Вверх
MisterCleric
Дата 22.12.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Привет. Вообще что-то ты не стандартное загадал.
Суть отражения базы в объекты Java как раз-то и сводится к постоянству(от слова persistance).
Изменения схемы базы можно делать во время деплоя, когда подымается persistanceContext.

А вот в рантайме естественно этого не сделаешь.
А ну-ка вызови из Java кода
Код

  alter table users add (
     new_colunm varchar2(255) not null
  )

А если потом еще захочешь удалять какое-нибудь поле?

Да и к стати поясни, как ты в рантайме добавляешь филды объектам? Что-то новенькое(для меня).

В случае, если какая-то не стандартная структура возможна у таблицы в зависимости от контекста, например.
То есть вариант хранить новые поля в одной колонке в Lob и структуре XML.
Oracle вообще позволяет делать своеобразные запросы на xml-колонки



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
kaa
Дата 22.12.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



MisterCleric, 
Не, я не в рантайме smile

Я делаю undeploy, добавляю поле в класс бина, потом деплою. При деплое он ессно лезет создавать таблицу заново...

В общем, как я понял, добавка поля в класс выливается в целый процесс, не, даже ПРОЦЕСС - обновление приложения smile С портирование данных из старой базы в новую smile
PM MAIL   Вверх
MisterCleric
Дата 23.12.2008, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Вообще-то можно схему при деплое и обновлять, 
Но я вот нашел некоторое "НО"

http://forum.hibernate.org/viewtopic.php?t=940659

Так что подумай.
Вообще-то практика показывает, что созданная схема автоматом из сущностей менее оптимальна, чем созданная руками.

Я вообще в своих в своей схеме создаю кучу вспомогательных таблиц, которые нужны чисто для статистики или для логики в хранимых процедурах (например, временные таблицы).
Соответственно, многие из таких объектов не находят себе места в логике на Java, как, к стати, и некоторые колонки в таблицах не отражены в сущностях
Так что думай



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
kaa
Дата 23.12.2008, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



MisterCleric, 

Тоесть правильнее использовать Entity с персистентностью управляемую бином а не контейнером, я правильно понимаю?
PM MAIL   Вверх
MisterCleric
Дата 23.12.2008, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Стоп. Может мы вообще о разных вещах говорим?
Я говорю о JPA+EJB3+Hibernate
А ты, наверное, о EJB2 EntityBean?


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
necromancer
Дата 24.12.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



решение простое:
добавил поле в бин, будь добр прогрузи соотв скрипт на изменение таблицы. Так как мало того что поле может быть notnull оно так же может быть ключем или иметь другие ограничения.
Изменение структуры таблиц при изменнии бинов считаю пагубной практикой - может вылится в потерю данных.


--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
kaa
Дата 24.12.2008, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



MisterCleric, 

Я про EJB3.0 на Glassfish, там по умолчанию не Hibrnate используется smile


necromancer, 
А как же апдейт программы?
Но, в общем, мысль понял.



Это сообщение отредактировал(а) kaa - 24.12.2008, 13:54
PM MAIL   Вверх
necromancer
Дата 24.12.2008, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



апдейт программы можно делать прогружая сприпты через SQL, не полагаясь только на контейнер и делать это желательно перед стартом контейнера.


--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
MisterCleric
Дата 24.12.2008, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

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



Цитата

апдейт программы можно делать прогружая сприпты через SQL, не полагаясь только на контейнер и делать это желательно перед стартом контейнера.


Собственно так всегда и делалось.
И я не понимаю, почему люди подымают подобные вопросы постоянно. Как будто боятся что-то в базе менять или из-за не знания SQL...

Все эти механизмы автоматического обновления интересны, но они еще совсем сыроваты и не имеют той мощи, которую предоставляют нам инструменты баз данных.

Лучше уделить больше внимания базе и ее оптимизации да и вообще иногда стоит логику в базу положить.
А само приложение уже адаптировать под базу.



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
kaa
Дата 25.12.2008, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



MisterCleric, 

Ну, я поднимаю потомучто незнаю многих вещей и только начинаю в этом копаться.
С SQL-ем я вроде дружен. smile
А насчет адаптированного приложения под базу - так это ж приязывает её к одной базе, разве нет?

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


Опытный
**


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

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



скорее это привязывает приложение к структуре данных.
Привязка к базе относится к таким малоприятным вещам, как:
1. хранение blob или других спец данных
2. хранимые процедуры/триггеры/функции
3. работа с XML посредством СУБД
4. использование драйверов =)
5. хитрости синтаксиса SQL запросов (например limit в MySQL)
6. автоикременты, последовательности

С большинсвом этих проблем можно справится на этапе проектирования приложения. Остается вопрос а надо ли?
Ведь если ваше пирложение является достаточно сложным и заранее планировалось для испоьлзованиян а одной СУБД, то переход на другую СУБД очень мало вероятен =)
Если же у вас коробочный продукт с заявленной поддержкой кучи СУБД, то для таких целей подойдет hibernate и наименьшее кол-во чистого SQL и "фич" баз данных. Например генерировать уникальные ключи придется самому или через спец класс, который будет "знать" какая у тебя СУБД.


--------------------
С уважением, 
                 Виталий Смык
----------------------------------------------------------------------------------------------
SCJP, SCWCD, OCA
http://dev.maryno.net/video/
PM MAIL WWW ICQ Skype   Вверх
kaa
Дата 25.12.2008, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



necromancer, 

Ага... Понятненько!


Всем большое спасибо за ответы! smile
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.4790 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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