Двойная запись в спящем режиме с отношением OneToMany - PullRequest
2 голосов
/ 22 октября 2019

Например, у меня есть пользовательский объект в спящем режиме с этими 2 полями:

@Entity
@Table(name = "user")
public class User {
    @OneToMany(fetch = FetchType.LAZY)
    @JsonIgnore
    private Set<User> addedUsers;

    @OneToMany(fetch = FetchType.LAZY)
    @JsonIgnore
    private Set<User> wantToAdd;
}

addedUsers для 2 человек, которые согласны совпадать друг с другом, в то время как wantToAdd для пользователя, которыйотправляет запрос о дружбе другому пользователю, но еще не получил ответа.
Вот серия запросов, которые я использовал: (предположим, есть 3 пользователя a, b, c)

a add b -> good  
a add c -> good   
b add c -> failed

Теперь этовыдаёт "java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'UK_4l1fmdm138stci88r2ht2ggff'" ошибку.
Таблица в MySQL верстаке
Похоже, что want_to_match_id не допускает дублирование. Как решить эту проблему?

Я также считаю, что это плохо для пользователя, но я не знаю, как я мог поступить иначе.

1 Ответ

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

Вы используете столбец want_to_match_id, чтобы сопоставить идентификаторы пользователей с идентификаторами пользователей, которые сопоставляются с этим человеком. Но вы добавили ограничение уникального ключа в столбец want_to_match_id, который вызывает проблему. Когда вы добавляете ограничение уникального ключа в этот столбец, это означает, что вы не можете сопоставить один и тот же идентификатор пользователя нескольким лицам. Предположим, у меня есть ИД пользователя 1 для лица А, и я должен сопоставить его для идентификаторов пользователей 2 и 3 Лица Б и Лица С. Но я также хочу сопоставить Person B с Person C, так что записи таблицы в конечном итоге будут выглядеть (согласно рассматриваемым деталям):

user_id | want_to_match_id
1           2
1           3
2           3

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

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