Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
 Аватар для Левиафам
38 / 33 / 12
Регистрация: 31.05.2012
Сообщений: 586

Наследование jpa

15.08.2017, 10:53. Показов 1993. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Хочу поинтересоваться. Допустим у меня есть класс A который является сущностью. Я хочу создать класс B как отдельная сущность и унаследовать класс А. При наследовании как известно для сущности В отдельная таблица создаваться не будет, и все дополнения к классу В повлияют на таблицу сущности А. Как сделать так чтобы сущность В при наследовании А, имела свою таблицу и не влияла на таблицу сущности А?

Я хочу чтобы ситуация была похожа на ту, когда мы создаем абстрактный класс и наследуемся от него используя анатацию @MappedSuperclass.

Добавлено через 5 минут
К примеру:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Entity(name = "table_a")
class A{
   
.....
String name;
 
String secName;
 
....
}
 
@Entity(name = "table_b")
class B extends A{
   
.....
String adress;
 
....
}
вот тут для В не будет создана таблица "table_b" и его поле "adress" добавится в таблицу "table_a". Можно ли как-то сделать так чтобы для В была своя таблица со всеми изменениями?
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.08.2017, 10:53
Ответы с готовыми решениями:

Генерация классов доменов(JPA)
Добрый вечер уважаемые форумчане. Я создал JPA проект, сгенерировал классы домены. Создал класс,для тестирования работоспособности...

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

About JPA
1. В самой JPA нет обратной генерации сущностей из таблиц БД? Только через IDE? 2. В большинстве случаев генерация таблиц по сущностям...

14
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
15.08.2017, 11:11
на абстрактный класс
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

вообще чтобы разобраться в теме, достаточно было написать в гугл что-то типа "jpa inheritance table per class"
1
 Аватар для Левиафам
38 / 33 / 12
Регистрация: 31.05.2012
Сообщений: 586
15.08.2017, 11:37  [ТС]
Цитата Сообщение от neske Посмотреть сообщение
на абстрактный класс
скорее на обычный класс а не Абстрактный)))....спасибо большое
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
15.08.2017, 11:39
Цитата Сообщение от Левиафам Посмотреть сообщение
скорее на обычный класс а не Абстрактный
на абстрактный
0
 Аватар для Левиафам
38 / 33 / 12
Регистрация: 31.05.2012
Сообщений: 586
15.08.2017, 12:11  [ТС]
Цитата Сообщение от neske Посмотреть сообщение
на абстрактный
вот статейка http://logicbig.com/tutorials/... heritance/

там на обычный повесили и всё работает

Добавлено через 2 минуты
Решил протестить вот так:

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Entity
@Table(name = "AAA")
public class A {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
 
    @Column(name = "name")
    private String name;
 
 
 
    public A(String name) {
        this.name = name;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}
 
 
@Entity
@Table(name = "BBB")
public class B extends A{
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
 
    @Column(name = "name")
    private String secName;
 
    public B(String name, String secName) {
        super(name);
        this.secName = secName;
    }
 
    @Override
    public int getId() {
        return id;
    }
 
    @Override
    public void setId(int id) {
        this.id = id;
    }
 
    public String getSecName() {
        return secName;
    }
 
    public void setSecName(String secName) {
        this.secName = secName;
    }
}
но не работает - у меня emf не создается. По идее как в статье сделал. Всё
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
15.08.2017, 12:15
Левиафам, то, что у вас корневой класс не абстрактый - ваше решение. В большинстве случаев там будет именно он.
1
 Аватар для Левиафам
38 / 33 / 12
Регистрация: 31.05.2012
Сообщений: 586
15.08.2017, 12:26  [ТС]
neske, я пример сверху привел и пишет ошибку:
Cannot use identity column key generation with <union-subclass> mapping for: ru.ccsss.entities.Test.B

не могу понять что он хочет((
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
15.08.2017, 12:29
первичный ключ маппится единожды
0
 Аватар для Левиафам
38 / 33 / 12
Регистрация: 31.05.2012
Сообщений: 586
15.08.2017, 12:31  [ТС]
Цитата Сообщение от neske Посмотреть сообщение
первичный ключ маппится единожды
типа нужно убрать генерацию ключа в проиводном классе? Я не совсем понял
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
15.08.2017, 12:33
да, сравните даже с примером из той статьи, которую вы сами скинули
0
 Аватар для Левиафам
38 / 33 / 12
Регистрация: 31.05.2012
Сообщений: 586
15.08.2017, 12:35  [ТС]
neske, нвсё равно не получается

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
@Inheritance(strategy = InheritanceType.JOINED)
@Entity
@Table(name = "AAA")
public class A {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
 
    @Column(name = "name")
    private String name;
 
 
    public A(String name) {
        this.name = name;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}
 
@Entity
@Table(name = "BBB")
public class B extends A{
 
 
    @Column(name = "secName")
    private String secName;
 
    public B(String name) {
        super(name);
    }
 
    public B(String name, String secName) {
        super(name);
        this.secName = secName;
    }
 
 
    public String getSecName() {
        return secName;
    }
 
    public void setSecName(String secName) {
        this.secName = secName;
    }
 
}
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
15.08.2017, 12:37
что не получается, какая ошибка?

Цитата Сообщение от Левиафам Посмотреть сообщение
Java
1
@Inheritance(strategy = InheritanceType.JOINED)
Вы же сначала хотели таблицу на класс?
0
 Аватар для Левиафам
38 / 33 / 12
Регистрация: 31.05.2012
Сообщений: 586
15.08.2017, 12:45  [ТС]
Цитата Сообщение от neske Посмотреть сообщение
Вы же сначала хотели таблицу на класс?
не, при джоине у меня родительские данные будут в родительской базе а в своей только новые. Я хочу чтобы всё отдельно было

вот ошибка если юзаю @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS).......с джоином просто поэксперементировал и забыл убрать)))

org.springframework.beans.factory.BeanCr eationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.springframework.beans.factory.suppor t.AbstractAutowireCapableBeanFactory.ini tializeBean(AbstractAutowireCapableBeanF actory.java:1628)
at org.springframework.beans.factory.suppor t.AbstractAutowireCapableBeanFactory.doC reateBean(AbstractAutowireCapableBeanFac tory.java:555)
at org.springframework.beans.factory.suppor t.AbstractAutowireCapableBeanFactory.cre ateBean(AbstractAutowireCapableBeanFacto ry.java:483)
at org.springframework.beans.factory.suppor t.AbstractBeanFactory$1.getObject(Abstra ctBeanFactory.java:306)
at org.springframework.beans.factory.suppor t.DefaultSingletonBeanRegistry.getSingle ton(DefaultSingletonBeanRegistry.java:23 0)
at org.springframework.beans.factory.suppor t.AbstractBeanFactory.doGetBean(Abstract BeanFactory.java:302)
at org.springframework.beans.factory.suppor t.AbstractBeanFactory.getBean(AbstractBe anFactory.java:197)
at org.springframework.context.support.Abst ractApplicationContext.getBean(AbstractA pplicationContext.java:1081)
at org.springframework.context.support.Abst ractApplicationContext.finishBeanFactory Initialization(AbstractApplicationContex t.java:856)
at org.springframework.context.support.Abst ractApplicationContext.refresh(AbstractA pplicationContext.java:542)
at org.springframework.boot.context.embedde d.EmbeddedWebApplicationContext.refresh( EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplicati on.refresh(SpringApplication.java:737)
at org.springframework.boot.SpringApplicati on.refreshContext(SpringApplication.java :370)
at org.springframework.boot.SpringApplicati on.run(SpringApplication.java:314)
at org.springframework.boot.SpringApplicati on.run(SpringApplication.java:1162)
at org.springframework.boot.SpringApplicati on.run(SpringApplication.java:1151)
at ru.ccsss.Application.main(Application.ja va:20)
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityMa nagerFactoryBuilderImpl.persistenceExcep tion(EntityManagerFactoryBuilderImpl.jav a:967)
at org.hibernate.jpa.boot.internal.EntityMa nagerFactoryBuilderImpl.build(EntityMana gerFactoryBuilderImpl.java:892)
at org.springframework.orm.jpa.vendor.Sprin gHibernateJpaPersistenceProvider.createC ontainerEntityManagerFactory(SpringHiber nateJpaPersistenceProvider.java:60)
at org.springframework.orm.jpa.LocalContain erEntityManagerFactoryBean.createNativeE ntityManagerFactory(LocalContainerEntity ManagerFactoryBean.java:353)
at org.springframework.orm.jpa.AbstractEnti tyManagerFactoryBean.buildNativeEntityMa nagerFactory(AbstractEntityManagerFactor yBean.java:370)
at org.springframework.orm.jpa.AbstractEnti tyManagerFactoryBean.afterPropertiesSet( AbstractEntityManagerFactoryBean.java:35 9)
at org.springframework.beans.factory.suppor t.AbstractAutowireCapableBeanFactory.inv okeInitMethods(AbstractAutowireCapableBe anFactory.java:1687)
at org.springframework.beans.factory.suppor t.AbstractAutowireCapableBeanFactory.ini tializeBean(AbstractAutowireCapableBeanF actory.java:1624)
... 16 common frames omitted
Caused by: org.hibernate.MappingException: Cannot use identity column key generation with <union-subclass> mapping for: ru.ccsss.entities.Test.B
at org.hibernate.persister.entity.UnionSubc lassEntityPersister.<init>(UnionSubclass EntityPersister.java:82)
at sun.reflect.NativeConstructorAccessorImp l.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImp l.newInstance(NativeConstructorAccessorI mpl.java:62)
at sun.reflect.DelegatingConstructorAccesso rImpl.newInstance(DelegatingConstructorA ccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstanc e(Constructor.java:423)
at org.hibernate.persister.internal.Persist erFactoryImpl.createEntityPersister(Pers isterFactoryImpl.java:96)
at org.hibernate.persister.internal.Persist erFactoryImpl.createEntityPersister(Pers isterFactoryImpl.java:77)
at org.hibernate.metamodel.internal.Metamod elImpl.initialize(MetamodelImpl.java:128 )
at org.hibernate.internal.SessionFactoryImp l.<init>(SessionFactoryImpl.java:297)
at org.hibernate.boot.internal.SessionFacto ryBuilderImpl.build(SessionFactoryBuilde rImpl.java:452)
at org.hibernate.jpa.boot.internal.EntityMa nagerFactoryBuilderImpl.build(EntityMana gerFactoryBuilderImpl.java:889)
... 22 common frames omitted

Добавлено через 1 минуту
вот код:
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Entity
@Table(name = "AAA")
public class A {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
 
    @Column(name = "name")
    private String name;
 
    public A() {
    }
 
    public A(String name) {
        this.name = name;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}
 
@Entity
@Table(name = "BBB")
public class B extends A{
 
    @Column(name = "secName")
    private String secName;
 
    public B(String name) {
        super(name);
    }
 
    public B(String name, String secName) {
        super(name);
        this.secName = secName;
    }
 
 
    public String getSecName() {
        return secName;
    }
 
    public void setSecName(String secName) {
        this.secName = secName;
    }
 
}
0
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
15.08.2017, 13:02
@GeneratedValue(strategy = GenerationType.TABLE)

говорят гугл решает многие проблемы, достаточно просто забить текст ошибки
1
 Аватар для Левиафам
38 / 33 / 12
Регистрация: 31.05.2012
Сообщений: 586
15.08.2017, 13:18  [ТС]
neske, спасибо большое бро!! Я до твоего сообщения это решил, но делал проделал с AUTO и заработало. Но ведь IDENTITY (на сколько помню) это такой тип генерации где ключ генерится базой и не ясно почему бы ей не генерить бы для двух таблиц свой собственный (может хибернейт так не может). Я на сколько помню тип TABLE это долгая генерация и возможно

Добавлено через 3 минуты
Цитата Сообщение от neske Посмотреть сообщение
говорят гугл решает многие проблемы
гуглом пользоваться только начинаю учиться))) Я если честно плохо перевожу английскую литературу и это дает о себе знать. Поэтому изучаю.....если бы знал хорошо английский то вообще бы ничего не спрашивал))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.08.2017, 13:18
Помогаю со студенческими работами здесь

JPA: @Basic
Для чего используется эта аннотация? Из доков: The simplest type of mapping to a database column. The Basic annotation can be applied to...

JPA: Hibernate
Где-то читал, что реализация JPA от Hibernate это entity-manager. Но там даже нету классов типа javax.persistence ... Нашел такие классы...

JPA Java
сбросьте кто хороший код по использованию JPA Java , а что-то не могу разобраться

EJB и JPA
Здравствуйте, может поможете советом. Мне нужно реализовать клиент серверное приложение с базой. Вопросы касательно сервера. Мне нужно...

Аннотации JPA
Здравствуйте, всем! Ребята подскажите пожалуйста как правильно аннотировать. есть таблица скажем T1, в нем есть поля (id, name) так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru