Я пытаюсь выполнить соединение ManyToMany между двумя сущностями JPA, используя таблицу ассоциаций, которая не очень проста. Я хочу знать, есть ли способ достичь этого без создания объекта таблицы ассоциации (аналогично использованию @JoinTable).
Схема базы данных
Таблица A
- ID (PK)
- Имя
Таблица B
- ID (PK)
- Имя
TableMapping
- ID (PK)
- Parent_ID (FK) -> TableMapping.ID
- A_ID(FK) -> TableA.ID
- B_ID (FK) -> TableB.ID
Пример
TableA
ID Name
-----------------------
A1 Algebra
A2 Data Structures
A3 Economics
TableB
ID Name
------------------------
B1 Beginner
B2 Advanced
TableMapping
ID Parent_ID A_ID B_ID
----------------------------------
1 NULL NULL B1
2 NULL NULL B2
3 1 A1 NULL
4 2 A2 NULL
5 2 A3 NULL
Отображение сохраняется способом, описанным выше, по причинамЯ не знаю, и я не могу это изменить. Это используется таким образом в сотне мест, и я должен работать так, как есть. По сути, данные в TableMapping можно упростить до чего-то подобного.
A_ID B_ID
-------------
A1 B1
A2 B2
A3 B2
Из моего понимания проблем есть два способа сделать это:
- Создать сущностьтаблицы ассоциации и сопоставьте два объекта с объектом таблицы ассоциации. Это должно сработать, но было бы здорово, если бы я мог сделать что-то вроде @JoinTable, и мне не пришлось бы создавать сущность для этой таблицы ассоциации, поскольку все, что он делал, это отображал сущности в TableA на сущности в TableB.
- Созданиепредставление, которое упрощает связь между двумя таблицами в одну строку базы данных для каждого отображения, как показано выше. Используйте представление в @ JoinTable.
Примечание. Для простоты кода я не создавал никаких методов получения / установки или конструкторов.
Код объекта
@Entity
@Table(name = "TableA")
public class EntityA {
@Id
@Column(name = "ID")
public int id;
@Column(name = "NAME")
public String name;
}
@Entity
@Table(name = "TableB")
public class EntityB {
@Id
@Column(name = "ID")
public int id;
@Column(name = "NAME")
public String name;
// Want to add below mapping
// @ManyToMany
// @JoinTable or equivalent??
// public Set<EntityA> aEntitySet;
}
Я не знаю, есть ли способ объединить два объекта, используя эту странную таблицу сопоставления, без создания объекта или представления. Есть ли способ сделать это?