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

Знатоки 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
17.03.2019, 10:30
    #39787274
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: связать две сущности с полями Map
Имхо, у тебя не хватает форинключа в таблице е1 на таблицу е2. Мамы тут не причем
...
Рейтинг: 0 / 0
17.03.2019, 12:40
    #39787287
brigad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hibernate: связать две сущности с полями Map
andreykaT,

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

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

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

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

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


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