powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: связать две сущности с полями Map
6 сообщений из 6, страница 1 из 1
Hibernate: связать две сущности с полями Map
    #39787247
brigad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.

Знатоки JPA и Hibernate подскажите как связать две сущности, у которых есть поля типа Map<String, String> отношением @OneToMany?

Вот entity1:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
@Entity
class Entity1 {
    @Id
    @Column(name="entity1_id")
    private Long id;

    @Column(name="entity1_name")
    private String name;

    @ElementCollection
    @CollectionTable(
        name = "map1",
        joinColumns = @JoinColumn(name = "entity1_id"))
    @MapKeyColumn(name = "map1_key")
    @Column(name = "map1_value")
    private Map<String, String> map1 = new HashMap<>();

    ...
}




Вот entity2:

Код: sql
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.
@Entity
class Entity2 {
    @Id
    @Column(name="entity2_id")
    private Long id;

    @Column(name="entity2_name")
    private String name;

    @ElementCollection
    @CollectionTable(name = "map2",
        joinColumns = @JoinColumn(name = "entity2_id"))
    @MapKeyColumn(name = "map2_key")
    @Column(name = "map2_value")
    private Map<String, String> map2 = new HashMap<>();

    // не работает
    @OneToMany(cascade = CascadeType.ALL)
    @JoinTable(
            name = "map2",
            joinColumns = @JoinColumn(name = "entity2_id"),
            inverseJoinColumns = @JoinColumn(name = "entity1_id"))
    private Set<Entity1> entity1s;
    ...
}




Структура базы данных вот такая:

Код: sql
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.
71.
72.
73.
74.
create table entity1
(
  entity1_id   int         not null unique,
  entity1_name varchar(10) not null,
  primary key (entity1_id)
);

create table map1
(
  entity1_id  int     not null,
  map1_key    int     not null,
  map1_value  decimal not null,
  primary key (entity1_id, map1_key),
  foreign key (entity1_id) references entity1 (entity1_id)
    on delete cascade
    on update cascade
);

create table entity2
(
  entity2_id   int         not null unique,
  entity2_name varchar(20) not null,
  primary key (entity2_id)
);

create table map2
(
  entity2_id int     not null,
  map2_key   int     not null,
  map2_value decimal not null,
  entity1_id    int     not null,
  primary key (entity2_id, entity2_key),
  foreign key (entity2_id) references entity2 (entity2_id)
    on delete cascade
    on update cascade,
  foreign key (entity1_id) references entity1 (entity1_id)
    on delete cascade
    on update cascade
);

insert into entity1 (entity1_id, entity1_name)
values (1, 'entity11'),
       (2, 'entity12'),
       (3, 'entity13');

insert into map1 (entity1_id, map1_key, map1_value)
values (1, 0, 0.1),
       (1, 1, 0.1),
       (1, 2, 0.1),
       (2, 3, 0.2),
       (2, 4, 0.2),
       (2, 5, 0.2),
       (3, 6, 0.3),
       (3, 7, 0.3),
       (3, 8, 0.3);

insert into entity2 (entity2_id, entity2_name)
values (1, 'entity21'),
       (2, 'entity22'),
       (3, 'entity23');

insert into map2 (entity2_id, map2_key, map2_value, entity1_id)
values (1, 0, 10, 1),
       (1, 1, 20, 1),
       (1, 2, 10, 2),
       (1, 3, 10, 2),
       (2, 0, 20, 2),
       (2, 1, 20, 2),
       (2, 2, 20, 3),
       (2, 3, 20, 3),
       (3, 0, 10, 3),
       (3, 1, 10, 3),
       (3, 2, 10, 1),
       (3, 3, 10, 1);


...
Рейтинг: 0 / 0
Hibernate: связать две сущности с полями Map
    #39787274
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо, у тебя не хватает форинключа в таблице е1 на таблицу е2. Мамы тут не причем
...
Рейтинг: 0 / 0
Hibernate: связать две сущности с полями Map
    #39787287
brigad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreykaT,

Они же связаны через таблицу map2.

Причем на уровне базы данных всё работает как надо, то есть к структуре БД вопросов нет.

А когда создаю e1 & e2 и пишу их в БД с помощью hibernate начинаются проблемы.
...
Рейтинг: 0 / 0
Hibernate: связать две сущности с полями Map
    #39787291
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brigadк структуре БД вопросов нет.таблицы называют именем сущности.
И не назвают именем map, list, integer
...
Рейтинг: 0 / 0
Hibernate: связать две сущности с полями Map
    #39787293
brigad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Лучше скажи как работать с такой структурой БД в hibernate.
...
Рейтинг: 0 / 0
Hibernate: связать две сущности с полями Map
    #39787296
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brigadPetro123,

Лучше скажи как работать с такой структурой БД в hibernate.зачем мне думать над извратом?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Hibernate: связать две сущности с полями Map
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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