我正在尝试找出解决当前问题的方法。
我有三个实体,公司,用户和隶属关系。隶属关系表是公司和用户实体之间的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);
这有助于解决问题,但是我不确定这是否是正确的做法,有什么想法吗?