powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как реализовать подобную структуру?
22 сообщений из 22, страница 1 из 1
Как реализовать подобную структуру?
    #37708651
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажем, есть несколько типов пользователей.
Вот примитивная схема объектов (POJO для маппинга на DB без аннотаций):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class UserA {
    private Long id;
    private String name;
    private String someFieldA;
}
public class UserB {
    private Long id;
    private String name;
    private String email;
    private String someFieldB;
}


Оперировать при наличии списка таких объектов несложно - всего лишь имплементировать один интерфейс, куда можно включить пересекающиеся поля.
Однако мне нужно осуществить связку из другого объекта один-ко-многим, который бы ссылался на любого из UserA или UserB. Понятно, в лоб эту задачу не решить, я просто привел желаемый результат. Разделять поля на UserA и UserB нерационально, так как могут быть еще UserC, UserD и т.д.
Логичным было бы иметь объект, содержащий общие поля, и ссылаться на него:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class User {
    private Long id;
    private String name;
}
public class UserA {
    private String someFieldA;
    private User user;
}
public class UserB {
    private String email;
    private String someFieldB;
    private User user;
}


И для полей User user можно было бы указать @OneToMany(targetEntity = User.class, fetch = FetchType.LAZY, mappedBy = "???"), но на что маппить?
Точнее, логика подсказывает имплементировать UserA и UserB общий интерфейс IUser, а в User объявить новое поле:
Код: java
1.
2.
3.
4.
5.
public class User {
    private Long id;
    private String name;
    private IUser user;
}


И маппить на него. Вот только ничего не получается - сыпятся ошибки при запуске проекта. Тут я очень мелко плаваю и пробовал пару аннотаций (типа @JoinColumn).

Поскажите, в каком направлении плыть? Может, есть другое решение задачи?
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708691
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему через наследование не сделать?
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708723
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,
- чем отличаются A и B?
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708739
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что от чего наследовать?

А от В отличается набором полей и зависимостей. Приведенная схема примитивизирована.
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708752
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,
1 вар.
Blazkowicz прав, только нужно проверить как качественно наследование делает хибер.
Т.е. интерфейсы только после ООП-наследования.
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708768
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не спорю, что не прав. Я просто не знаю как это сделать (и что - "это"?) :)
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708769
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckЧто от чего наследовать?
А от В отличается набором полей и зависимостей. Приведенная схема примитивизирована.
User c общими полями.
public class User {
private Long id;
private String name;
}
в наследниках отличие
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708774
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется, что как-то надо просто указать для поля IUser user, чтобы оно не создавалось в БД, а было "временным". И маппить на него. Будет ли в данном случае автомаппинг, если указывать у UserA и UserB
Код: java
1.
2.
3.
4.
@OneToOne(fetch = FetchType.EAGER, orphanRemoval = true)
@Cascade({CascadeType.ALL})
@JoinColumn(name = "userId")
private User user;

?
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708803
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,
без интерфейса можешь модель делать?
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708821
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, могу. Но тогда должно ссылаться на один объект, а мне нужно на один из ... Для того и городил схему с интерфейсом.
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708837
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckКонечно, могу. Но тогда должно ссылаться на один объект, а мне нужно на один из ... Для того и городил схему с интерфейсом.
вот и приведи БЕЗ интерфейсов на ООП
Наследование в хибере:
- иерархия в одну таблицу (вариант с дискриминатором)
- подклассы в отдельных таблицах с общими полями в главной
- все в отдельных таблицах
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708853
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты думаешь, если бы я знал как это делается, я бы городил свою схему или задавал тут вопросы?
Ни по одному из приведенных пунктов мне нечего написать - я просто ранее не сталкивался с таким и просто не знаю, как это делается. Затем и обратился за помощью.
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708869
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,
вот. А я боюсь что ты всё занешь :)
Ну давай от простого - все пол-ли в одну таблицу
Код: java
1.
2.
3.
4.
5.
public class User {
    private Long id;
    private String name;
    private Long idТипаПользователя 
}


?
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708914
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, допустим. Вводить еще одну таблицу с типами пользователей? Кроме идентефикатора что туда еще надо ложить? - Я пока не улавливаю смысл ...
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708922
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckТак, допустим. Вводить еще одну таблицу с типами пользователей? Кроме идентефикатора что туда еще надо ложить? - Я пока не улавливаю смысл ...
конечно.
Стандартный справочник
ТипыПользователей (id, name)
Тебе ведь имяТипа нужно?
Связь МногиеКодному
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708944
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже, что мы друг друга не понимаем. Ты, видимо, не понял чего я хочу добиться, а я - что должен получить ты в результате.
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37708954
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckПохоже, что мы друг друга не понимаем. Ты, видимо, не понял чего я хочу добиться, а я - что должен получить ты в результате.
Делай через наследование и в мануале ищи примеры по ключевому слову Inheritance
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37709036
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,

Дак ты молчишь и не пишешь зачем тебе разный тип класса.:)
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37709146
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruckа я - что должен получить ты в результате.
я сделал следующее:
Цель: "проще оперировать списком без интерфейса" (твои слова)
Код: java
1.
class UserA, UserB, UserN


преобразовываем в класс одного типа, но с маркером A, B, ...N
Код: java
1.
2.
3.
4.
5.
6.
class User
{
  id
  Name
  маркер Marker
}


Цель достигнута.
Так что, или не молчи.... или иди в гугль
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37709194
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри, я не молчу, я просто отходил :)

Блазкович, как всегда - респект и уважуха! Твой вектор мне очень помог.
Получилось типа такого:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
@Entity
@Table(name = "user")
@Inheritance(strategy = InheritanceType.JOINED)
public class User {
	@Id
	@Column(name = "id")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	@Column(name = "name", length = 32)
	private String name;
}
@Entity
@Table(name = "userA")
public class UserA extends User {
	@Column(name = "email", length = 64)
	private String email;

	@Column(name = "someFieldA", length = 16)
	private String someFieldA;
}
@Entity
@Table(name = "userB")
public class UserB extends User {
	@Column(name = "someFieldB", length = 16)
	private String someFieldB;
}


Для теста забиваю в User:
id = 1 (auto), name = "name1"
id = 2 (auto), name = "name2"
в UserA:
id = 1, email = "email1", someFieldA = "val1"
в UserB:
id = 2, someFieldB = "val2"

Вытягиваю данные:
Код: java
1.
User user1/*user2*/ = userDAO.getUser(1L/*2L*/);


Получаю user1 - тип UserA со значениями id = 1, name = "name1", email = "email1", someFieldA = "val1", и user2 - тип UserB со значениями id = 2, name = "name2", someFieldB = "val2".
Как раз самое то ...

Правда, еще не разбирался как эти значения туда программно помещать :) - как UserA и UserB, или раздельно с User, но не думаю, что это станет проблемой.
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37709248
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,
ну вот, InheritanceType.JOINED - самый распростарнённый в наследовании хибера.
Единственно, что, при этом варианте - UserA и UserB и т.д. ты увеличиваешь только в дезигн (разработка).
В варианте без наследования модель не меняется (ран-тайм)
Удачи!
...
Рейтинг: 0 / 0
Как реализовать подобную структуру?
    #37709306
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу. А я, что, спорю, чт ли?
Блазкович назвал только одно слово - дал ниточку, а я по ней уже раскрутил все. Мне примерно такое и надо было - маленький пинок, чтобы сдвинуться. Дока по Хиберу огромная, знание английского не совершенно свободное, где и что искать - не знаю, а засесть дня на 2 - сорри, не могу. Так что тебе тоже спасибо за содействие, но что ты хотел сказить - я так и не понял
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как реализовать подобную структуру?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]