У меня есть задача, требующая, чтобы некоторые «специальные» пользователи могли переключаться между учетными записями без необходимости входа в систему.В качестве отправной точки у меня есть таблица соединений, которая состоит только из идентификаторов пользователей.В форме PRIMARY_USER_ID и SECONDARY_USER_ID в качестве внешних ключей из таблицы USERS.Первое, что должно быть реализовано, это GET всех соединений между пользователями.[{"primary_username", "primary_email", "Secondary_username", "Secondary_email"}]
Я создал отношение «многие ко многим» для объекта «Пользователь», где обе стороны отношения относятся к «Пользователь».
@EqualsAndHashCode.Exclude
@ToString.Exclude
@ManyToMany(fetch = FetchType.LAZY, cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(name = "CONTACTS_ONE_LOGIN",
joinColumns = { @JoinColumn(name = "PRIMARY_CONTACT")},
inverseJoinColumns = {@JoinColumn(name = "SECONDARY_CONTACT")}
)
private Set<Contact> secondaryContacts = new HashSet<>();
@EqualsAndHashCode.Exclude
@ToString.Exclude
@ManyToMany(cascade = {
CascadeType.REMOVE
},
mappedBy = "secondaryContacts")
private Set<Contact> primaryContacts = new HashSet<>();
Теперь проблема заключается в том, когда я хочу получить все подключениямежду контактами мне нужно было бы сначала получить всю информацию из таблицы соединений, а затем пройти через каждый PRIMARY_CONTACT_ID, чтобы получить связанные контакты.Что приведет к очень низким показателям.
Я хотел изменить это, чтобы иметь сущность CONNECTED_USERS, которая вместо двух идентификаторов USER имела бы два отношения «многие к одному» для USER.
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PRIMARY_CONTACT_ID")
private Contact contact;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SECONDARY_CONTACT_ID")
private Contact contact;
Мой вопрос, это собирается повысить производительность, так как в моей БД разработчика у меня не так много пользователей, чтобы проверить это должным образом?Или есть ли лучший способ сделать это?