Присоединиться к объектам JPA со сложной таблицей ассоциации, не создавая объект ассоциации? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь выполнить соединение 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

Из моего понимания проблем есть два способа сделать это:

  1. Создать сущностьтаблицы ассоциации и сопоставьте два объекта с объектом таблицы ассоциации. Это должно сработать, но было бы здорово, если бы я мог сделать что-то вроде @JoinTable, и мне не пришлось бы создавать сущность для этой таблицы ассоциации, поскольку все, что он делал, это отображал сущности в TableA на сущности в TableB.
  2. Созданиепредставление, которое упрощает связь между двумя таблицами в одну строку базы данных для каждого отображения, как показано выше. Используйте представление в @ 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;
}

Я не знаю, есть ли способ объединить два объекта, используя эту странную таблицу сопоставления, без создания объекта или представления. Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 30 октября 2019

Если ваш вопрос заключается в том, возможно ли избежать создания какой-либо ассоциации, я считаю, что ответ будет отрицательным. В конце концов, для этого нужно место, где его нужно сохранить.

0 голосов
/ 30 октября 2019

Сначала вы должны изучить нормализацию базы данных. Вы должны выбрать OneToMany вместо ManyToMany. Tip: Вы можете сделать это, добавив другую таблицу между двумя таблицами.

Кроме того, объекты, которые вы создаете для использования OneToMany, должны быть List или Set. вы можете посмотреть аннотацию OneToMany

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...