powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA и исторические таблицы, сменить @ID наследуемой Entity
8 сообщений из 8, страница 1 из 1
JPA и исторические таблицы, сменить @ID наследуемой Entity
    #39968937
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подскажите как в JPA поверх spring boot 2 исторические таблицы следует оформлять. у основной таблицы есть ID, у исторической ID становится обычным not null полем, HIST_ID становится primary key.

Код: 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.
@Entity
@Builder
@Data
@AllArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Table(name="products")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Product {
        @Column(name = "id")
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Id
        private @NonNull Long id;
        private @NonNull String name;
...
}


@Entity
@Data
@AllArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Table(name="hist_products")
public class ProductHistory extends Product {
        @Column(name = "hist_id")
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Id
        private @NonNull Long histId;

        @Column(name = "hist_inserted")
        private String histInserted;

        private @NonNull Long id;




Caused by: java.lang.ClassCastException: class org.hibernate.mapping.UnionSubclass cannot be cast to class org.hibernate.mapping.RootClass (org.hibernate.mapping.UnionSubclass and org.hibernate.mapping.RootClass are in unnamed module of loader 'app')


тот же exception если из hist таблицы убрать id, как я понимаю тогда 2 primary ключа выходит.
...
Рейтинг: 0 / 0
JPA и исторические таблицы, сменить @ID наследуемой Entity
    #39968956
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1,
Не делают так историю.
*наследование при рсубд не рекомендуется без обоснования
Вам в ветку Разработка БД чтобы продумать правильные таблицы истории.
Правильную Модель.
А jpa работает только по правильной.
Еще делят на OLAP/OLTP и денормализуют таблицы истории (держат отдельно)
Имхо
...
Рейтинг: 0 / 0
JPA и исторические таблицы, сменить @ID наследуемой Entity
    #39969009
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
hck1,
Не делают так историю.

Абсолютное большинство именно так делают. Slowly changing dimension
...
Рейтинг: 0 / 0
JPA и исторические таблицы, сменить @ID наследуемой Entity
    #39969011
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По идее это можно решить, если аннотировать не поле, а геттер. Но это проверить надо, на 100% не гарантирую. Плюс в хибернейте есть встроенный аудит - envers - его еще можно чекнуть
...
Рейтинг: 0 / 0
JPA и исторические таблицы, сменить @ID наследуемой Entity
    #39969178
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1,

Выкинуть Lombok, аннотации делать над гетером.

Вместо lombok можно взять java 14 :-)
...
Рейтинг: 0 / 0
JPA и исторические таблицы, сменить @ID наследуемой Entity
    #39969194
hck1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то не получилось с анотацией над геттером. @Data заменил на @Setter, сгенерировал геттеры, над нужным геттером поставил @Id, но получил тот же exception.
вопрос, а что я должен был c id сделать в ProductHistory ? я попробовал просто убрать, попробовал убрать поле и переопределить getId(), что бы избавится от наследуемой анотации @Id

Код: java
1.
2.
3.
4.
        @Override
        public Long getId() {
                return super.getId();
        }
...
Рейтинг: 0 / 0
JPA и исторические таблицы, сменить @ID наследуемой Entity
    #39969257
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В моей голове это было как-то так:
Базовый класс:
Код: java
1.
2.
3.
4.
5.
    @Id
    @Column(name="id")
    public Long getId() {
        return id;
    }


История:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    @Id
    @Column(name="histId")
    public Long getId() {
        return histId;
    }

    @Column(name="id")
    public Long getEntityId() {
        return id;
    }


Но опять же не уверен, будет ли точно так работать
...
Рейтинг: 0 / 0
JPA и исторические таблицы, сменить @ID наследуемой Entity
    #39969300
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hck1
PetroNotC Sharp
hck1,
Не делают так историю.

Абсолютное большинство именно так делают. Slowly changing dimension

Угу.
У нас был тип 2 SCD и это быт такой геморрой с меняющимся ID, FK что врагу не пожелаю.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JPA и исторические таблицы, сменить @ID наследуемой Entity
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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