如何使用额外的列更新ManyToMany

时间:2018-09-06 18:16:34

标签: hibernate spring-boot spring-data-jpa

我正在尝试找出解决当前问题的方法。

我有三个实体,公司,用户和隶属关系。隶属关系表是公司和用户实体之间的ManyToMany关系的链接表,并且具有我需要使用的其他列。

在公司方面,我有:

@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.

这告诉我必须以某种方式设置用户,但不确定如何设置。我只能访问当前用户的详细信息,但从属关系可能有同一公司的不同用户。如何为每个从属设置用户?

更新: 我添加了

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);

这有助于解决问题,但是我不确定这是否是正确的做法,有什么想法吗?

0 个答案:

没有答案