Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Маппинг несколько класов на одну таблицу


Автор: diyko 25.3.2008, 12:34

например есть таблица сompany
с каким то набором полей
я хочу сделать класс CompanyShortInfo, класс CompanyInfo и класс CompanyFullInfo
(CompanyInfo    extends CompanyShortInfo  
CompanyFullInfo extends CompanyInfo )
з мапингом на одну таблицу
Мне ето нужно потому что есть варианти когда не надо извлекать все поля компании а только два или три
как наиболее коректно ето сделать?
Или лучше с помощю лейзилоадинга?

Автор: Llucas 25.3.2008, 16:12
Проще все в запросе явно указывать какие поля тебе нужно в каждой конкретной ситуации.

Вообще ты можешь сделать основной класс.. К примеру у него будет ряд переменных и еще две переменные - классы которые ты хотел создать. Эти классы не должны быть extends а просто implements Cloneable, Serializable . В эти классы клади какие-ты хочешь переменные.


Автор: diyko 25.3.2008, 16:44
Можно, но не очень красиво  smile
А что будет если просто сделать мапинг без каких либо дискриминаторов? С xml  ето когдато работало
 

Автор: Llucas 25.3.2008, 16:50
Здесь такое дело... если у тебя есть таблица и ты хочешь брать из нее ряд столбцов... разбей эту таблицу на 2 таблицы, свяжи их, сделай маппинг  и работай с разными объектами... 

Что такое дискриминатор?

Автор: necromancer 25.3.2008, 17:25
to Llucas господи, какие сложности =))))
есть ведь такая штука в базах, как синонимы, вьюшки и т.п. лабудень =)

Добавлено @ 17:25
плюс ко всему посредством аннотаций у меня вполне нормально получилось замапить 2 класса на одну таблицу. Трудности начнутся при написании HSQL

Автор: Llucas 25.3.2008, 17:28
Цитата

есть ведь такая штука в базах, как синонимы, вьюшки и т.п. лабудень =)


necromancer, вообще не понял к чему  ты это сказал...

Цитата

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


Если хочешь использовать хибернейт, чтобы избежать трудностей с hql не надо так делать...

Автор: necromancer 25.3.2008, 17:30
вопорс был? 
ответ был? 
а вот это вот
Цитата

 разбей эту таблицу на 2 таблицы

бред ИМХО
такие решения не стоит предлагать, с учетом того что ВОПРОС стоял не как сделать 2 класса на 2!!! таблицы, а как 2 классана ОДНУ таблицу!

Добавлено через 51 секунду
насчет HSQL я о нем не шибко хорошего мнения. но это все субъективно

Автор: Llucas 25.3.2008, 17:45
Вопрос стоит так что сам по себе уже предусматривает сложности в работе... 
Я говорю о том, что надо пересмотреть структуру БД или при выполнении запроса явно указывать поля  -  вот и все... Бреда тут нету.

Автор: necromancer 25.3.2008, 18:08
теперь я отвечу за свои слова =)
если в базе создать синоним то к таблице можно обращатся по 2-м разным именам. но это будет та же самая таблица.
С вью впринципе тоже самое и даже update может проходить если не используется аггрегация и другие сложности.
Цитата

Вопрос стоит так что сам по себе уже предусматривает сложности в работе... 

Не всегда.
Например есть строчка в бад имя и фото. при работе с одним классом Хибер будет тянуть и фото. что явно накладно. разбиваем работу с хибером на два класса по одному ключу - повышаем производителньость системы в разы. А структура базы полностью отражает сущность объекта. Или предлагаешь хранить имена и фото в разных таблицах + ключ + связывание + контроль целостности

Автор: diyko 25.3.2008, 18:28
Цитата(necromancer @ 25.3.2008,  18:08)

Например есть строчка в бад имя и фото. при работе с одним классом Хибер будет тянуть и фото. что явно накладно. разбиваем работу с хибером на два класса по одному ключу - повышаем производителньость системы в разы. А структура базы полностью отражает сущность объекта. Или предлагаешь хранить имена и фото в разных таблицах + ключ + связывание + контроль целостности

Да ето именно такой случай наверное
каждий раз тянуть фото накладно
проще два класа  к одной таблице
какие проблеми могут бить с HQL
Кто то знает точно?

Разбивать на две таблици не хочеться также потому что логически ето все таки один обект

Автор: necromancer 25.3.2008, 18:41
кстати вот не знаю можно ли сделать lazyLoad на поле и наверное в принципе можно создать фильтры.

Автор: iluvatar 26.3.2008, 09:14
насколько я понял, вопрос здесь стоит как реализовать наследование нескольких классов, отображающих одну таблицу.

Автор: diyko 26.3.2008, 12:12
В общем да
і как верно их мапить

Автор: necromancer 26.3.2008, 14:50
про наследование читаем документацию по Hibernat

Автор: diyko 26.3.2008, 15:51
читал

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)