Как обновить ManyToMany с дополнительными столбцами - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь выяснить, как решить проблему, с которой я сталкиваюсь сейчас.

У меня есть три лица: Компания, Пользователь и Филиал. Таблица Affiliation - это таблица ссылок для отношений ManyToMany между сущностями Company и User и содержит дополнительные столбцы, которые мне нужно использовать.

На стороне компании у меня есть:

@JsonManagedReference
@OneToMany(mappedBy = "company", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Affiliation> affiliations = new HashSet<>();

На стороне пользователя у меня есть:

@JsonManagedReference(value="user")
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<Affiliation> affiliations = new HashSet<>();

На стороне присоединения у меня есть:

@JsonBackReference
@ManyToOne(optional = false)
@JoinColumn(name = "company_id", referencedColumnName = "company_id")
private Company company;

@JsonBackReference(value = "user")
@ManyToOne(optional = false)
@JoinColumn(name = "user_id", referencedColumnName = "user_id")
private User user;

Класс репозитория:

public interface ICompanyRepository extends JpaRepository<Company, Long>

В классе реализации сервиса я выдаю. Компания является обновленным объектом компании.

Company updatedCompany = companyRepository.save(company);

И это дает мне

Причина: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Column 'user_id' cannot be null.

Это говорит мне о том, что я должен как-то настроить User, но не уверен, как. Я могу получить доступ только к текущим данным пользователя, но у филиалов могут быть разные пользователи для одной и той же компании. Как я могу установить пользователя для каждой принадлежности?

Обновление: Я добавил

Set<Affiliation> affiliations = company.getAffiliations();
Iterator<Affiliation> iterator = affiliations.iterator();
while (iterator.hasNext()) {
   Affiliation existingAffiliation = iterator.next();
   Long userId = existingAffiliation.getUserId();
   User user = userRepository.findOne(userId);
   existingAffiliation.setUser(user);
 }

до

   Company updatedCompany = companyRepository.save(company);

Это помогло решить проблему, но я не уверен, что это правильный способ, есть мысли?

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