Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA relation for enttity superclass / 14 сообщений из 14, страница 1 из 1
26.07.2018, 13:14
    #39679596
publexus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
Код: 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.
28.
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name = "OBJECT_TYPE", discriminatorType = DiscriminatorType.STRING)
public abstract class DBObject {...}


@MappedSuperclass
public abstract class Subject extends DBObject {/* пустой - маркерный */}


@Entity
@DiscriminatorValue("PERSON")
public class Person extends Subject {...}


@Entity
@DiscriminatorValue("ORGANIZATION")
public class VrOrganization extends Subject {...}


@Entity
@DiscriminatorValue("ADDRESS")
public class Address extends DBObject {
	@OneToOne(targetEntity = Subject.class)
	@JoinColumn(name = "tenant")
	private Subject tenant;
...
}




Не работает в таком виде, т.к. требует чтобы в OneToOne targetEntity была сущность. Если туда поставить DBObject, то работает, но промежуточный Subject не принимает.

Есть идеи как реализовать без создания дополнительной избыточной таблицы для Subject?
...
Рейтинг: 0 / 0
26.07.2018, 13:37
    #39679611
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
publexus,
Зачем вам наследование, если его в базе нету?
Зачем вам один к одному, если в базе в этом нет смысла?
Если у вас адрес Сущность важная по бизнесу, то делаете таблой.
Если нет, то это поле у класса юзверь.
Imho
...
Рейтинг: 0 / 0
26.07.2018, 14:19
    #39679637
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
publexus,
а это "targetEntity = Subject.class" зачем?
у меня где то похожая на Вашу, конструкция работала без таблицы для @MappedSuperclass, но конечно с таблицей для DBObject, который у меня не абстрактный
...
Рейтинг: 0 / 0
26.07.2018, 15:54
    #39679727
publexus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
Kachalovpublexus,
а это "targetEntity = Subject.class" зачем?
Чтобы обозначить, что tenant - это Person или Organization.
Если установить подставить targetEntity = DBObject.class, то туда можно сохранить, например, Adress, что является логически неверным.
...
Рейтинг: 0 / 0
26.07.2018, 16:02
    #39679733
publexus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
Petro123publexus,
Зачем вам наследование, если его в базе нету?
Зачем вам один к одному, если в базе в этом нет смысла?
Если у вас адрес Сущность важная по бизнесу, то делаете таблой.
Если нет, то это поле у класса юзверь.
Imho

1. Условное наследование есть и в базе в виде каскадных таблиц: DBObject - таблица с общими данными для всех типов объектов, таблица Person, связанная по основному ключу с DBObject с параметрами и т.д.
2. На самом деле там ManyToOne, просто с другой стороны не будет референса, поэтому сделано для упрощения.
3. Все неабстрактные сущности являются таблицами.
...
Рейтинг: 0 / 0
26.07.2018, 19:14
    #39679844
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
publexus,
1. Я тебе говорю что СУБД ничего не знает о наследовании. А ты про свое что у собаки есть реально пятая нога.
Можно пришить, но это никчему.
В ООП нужно наследование. И то не всегда.
...
Рейтинг: 0 / 0
03.08.2018, 16:04
    #39683163
publexus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
Petro123,

Причем тут "СУБД ничего не знает о наследовании"?

Я спрашивал о том, как это реализовать в Java.

А наследование в приведенном примере необходимо по модели данных и бизнес-логике. Потому что необходимо оперировать так называемыми суперсущностями (абстрактными классами сущностями являющихся суперклассами конечных сущностей), как например ВDObject или Subject.

Например, по адресу может находиться как физ.лицо так и организация. Провайдер данных на основе id и DiscriminantValue соберет сущность необходимого типа из нескольких таблиц. Если не вводить Subject, а указать тип резидента DBObject, то туда можно запихнуть любой объект, наследованный от DBObject (например тот же адрес), что неверно по логике, т.к. там должны быть только физ.лицо или организация. Поэтому и вводиться Subject.

Помимо, того при запросе суперсущности ВDObject провайдер Hibernate вместо того, чтобы сначала вытянуть из базы DiscriminantValue, а затем собственно данные из необходимых таблиц, вместо этого он просто джойнит все таблицы иерархии в одном громадном запросе (выполняя обращения к заведомо ненужным таблицам). А как результат введения Subject предполагается, что в запросе будут только таблицы данных физ.лица так и организации.
...
Рейтинг: 0 / 0
03.08.2018, 17:57
    #39683204
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
publexusПричем тут "СУБД ничего не знает о наследовании"?

Я спрашивал о том, как это реализовать в Java.а образование у вас есть?
- закон ОРМ одна сущность это таблица.
- сущность физЛицо и Организации это разные сущности.
Отсюда ваше "комбинируем сущность из двух таблиц" выглядит нелогичным.
...
Рейтинг: 0 / 0
03.08.2018, 17:59
    #39683205
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
publexus,
Нарисуйте Модель со связями.
Либо позовите Разработчика БД, а не java программиста.
...
Рейтинг: 0 / 0
03.08.2018, 18:38
    #39683213
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
publexusЕсли не вводить Subject,сущность понятие от бизнеса.
В бухгалтерии есть Контрагент. Который может быть физЛицом и Организацией.
...
Рейтинг: 0 / 0
03.08.2018, 19:24
    #39683225
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
Ну и вот ссылка на возможности хибера.
Т.е. идете от субд, орм, хибер, jpa.
А не от того что хочет java.
https://samsonych.com/lib/hibernate/inheritance.html
Удачи!
...
Рейтинг: 0 / 0
06.08.2018, 09:55
    #39683591
publexus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
[quot Petro123]publexusзакон ОРМ одна сущность это таблица.

Ну не знаю, может быть это какой-то старославянский языческий закон...

У нас успешно используется Inheritance, ElementCollection и одна сущность, за исключением разве что самых простых, как правило, состоит из целого набора таблиц. В реляционных базах всегда примерно так и бывает. Может вы путаете с каким-то другим типом баз, например документоориентированной MongoDB.

[quot Petro123]publexusТ.е. идете от субд, орм, хибер, jpa. А не от того что хочет java.

И с этим не согласен.
Надо идти от требуемой бизнес модели к объектной Java модели, и лишь затем на основе требуемых для хранения данных к структуре БД. Это идеальный вариант, но, иногда, на этапе разработки Java модели требуется учитывать некоторые компромиссы, связанные с особенностью конкретной СУБД или производительностью доступа к данным.
...
Рейтинг: 0 / 0
06.08.2018, 12:39
    #39683666
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
publexusУ нас успешномодель то где?
Можно и из даты 3 сущности с дуру построить. Год, месяц и день.
А снизу абстрактных предков и сбоку интерфейсы.
...
Рейтинг: 0 / 0
06.08.2018, 12:41
    #39683667
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JPA relation for enttity superclass
publexusсвязанные с особенностью конкретной СУБДвыше дал ссылку как хибер учитывает отсутствие наследования в базе.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA relation for enttity superclass / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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