Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Глобальные сcылка на объекты разных классов


Автор: jvoid 19.9.2011, 19:44
Есть приложение в нем некоторые сущности хранимые в БД с помощью hibernate, нужно как то сделать, что б можно было получать объекты разных классов, что то вроде одного общего id, для объектов разных классов. 

Автор: Stolzen 19.9.2011, 20:25
А конкретнее, чего хочется добиться? И пример

Автор: jvoid 19.9.2011, 20:36
Я хочу сделать что то типа закладок на объекты разных классов например:

Код

@Entity
public class Project {
    
        @Id
        private Long id; // id проекта
..........................................    


Код

@Entity
public class NaturalPerson  {
   @Id
    private Long Id;
...........................................


Код

//закладка 329876

Object obj=getAppObject("329876") // получил объект класса Project в соответствии с закладкой

// закладка 687788
Object obj=getAppObject("687788") // получил объект класса NaturalPerson в соответствии с закладкой




Автор: k0rvin 19.9.2011, 21:09
интересно, а как getAppObject должен догадаться объект какого класса он должен вернуть?

Автор: jvoid 19.9.2011, 21:12
Цитата(k0rvin @ 19.9.2011,  21:09)
интересно, а как getAppObject должен догадаться объект какого класса он должен вернуть?

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

Автор: Farmazon 20.9.2011, 06:29
общий родитель и наследование таблиц через сквозной ключ?...

Не очень хорошая идея... Храни явно в табличке закладок класс и идентификатор, этого достаточно для извлечения...

Автор: Nofate 20.9.2011, 12:33
А людям и проектам обязательно иметь сквозные идентификаторы?

Автор: Farmazon 20.9.2011, 13:41
Я ж сказал, это не очень хорошая идея. Зато гарантируется "правильность" закладки.

Есть вариант ещё, сделай 2 типа(или больше) закладок: для проекта и для персоны. И если очень хочется - выдели супертип закладки и замути наследование сущностей через общую таблицу (только нули для внешних ключей разреши). Эээ.. понятно ли выразился?...


Автор: LSD 20.9.2011, 13:49
В чем проблема создать сущность закладка, у которой сделать пару полей, имя ентити и айди?

Автор: Farmazon 20.9.2011, 14:52
тоже самое, что и наследование сущностей закладок через общую таблицу)

Автор: LSD 20.9.2011, 15:35
Цитата(Farmazon @  20.9.2011,  15:52 Найти цитируемый пост)
тоже самое, что и наследование сущностей закладок через общую таблицу) 

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

Автор: Farmazon 20.9.2011, 20:33
Это я тоже уже предлагал постом выше... недостаток только в том, что целостность не бд обеспечивает и закладки надо подчищать ручками...
---
ну вот, 3 решения езь...

Автор: Farmazon 20.9.2011, 20:51
топикстартёру вообще надо что-нибудь ещё?...

Автор: jvoid 26.9.2011, 10:06
Спасибо, пожалуй лучший вариант создать отдельную сущность как  LSD, предложил. Так и сделаю.

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