我的User
位于Organisation
的{{1}}关系中,当用现有的组织创建用户时,我试图将其分配给它而不创建新的组织。
在我的服务中,以下是我创建用户的方式:
ManyToOne
使用我的@Override
public UserInfo createUser(UserInfo newUser) {
// Check if organisation exists
OrganisationEntity orga = organisationDao.findByName(newUser.getOrganisation());
if (orga != null) {
// Organisation exists, we save it with the correct ID
return mapper.map(userDao.save(mapper.map(newUser, orga.getId())));
} else {
// Organisation does NOT exists, we save it and create a new one
return mapper.map(userDao.save(mapper.map(newUser, (long) -1)));
}
}
(帮我将模型转换为实体):
Mapper
这是我的 public UserEntity map(UserInfo userInfo, Long orgaId) {
UserEntity user = new UserEntity();
user.setEmail(userInfo.getEmail());
user.setFirstName(userInfo.getFirstName());
user.setLastName(userInfo.getLastName());
user.setPassword(userInfo.getPassword());
OrganisationEntity orga = new OrganisationEntity();
orga.setName(userInfo.getOrganisation());
// We set the organisation's ID
if (orgaId != -1)
orga.setId(orgaId);
user.setOrganisation(orga);
return user;
}
:
UserDao
最后我的@Transactional
public interface UserDao extends CrudRepository<UserEntity, Long> {
UserEntity save(UserEntity user);
}
中的关系:
UserEntity
使用新的组织工作创建用户但是当我输入现有组织时,我得到以下内容:
传递给persist的分离实体
从我的understanding来看,这是一个双向一致性问题,但到目前为止答案对我没有帮助。
最后这是我的实体类:
@ManyToOne(targetEntity = OrganisationEntity.class, cascade = CascadeType.ALL)
@JoinColumn(name = "orga_id")
private OrganisationEntity organisation;
和
@Entity
@Table(name = "\"user\"")
public class UserEntity {
@Id
@Column(name = "user_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@NotNull
private String email;
@NotNull
private String firstName;
@NotNull
private String lastName;
@NotNull
private String password;
@ManyToOne(targetEntity = OrganisationEntity.class, cascade = CascadeType.ALL)
@JoinColumn(name = "orga_id")
private OrganisationEntity organisation;
// Getters & Setters
}
答案 0 :(得分:0)
我已经解决了我的问题,
正如您在上面的映射器中看到的那样,我正在创建一个OrganisatonEntity
的新实例,无论它是什么,即使它已经存在!
因此,我的代码中的一个小变化解决了它:
public UserEntity map(UserInfo userInfo, OrganisationEntity organisationEntity);
而不是
public UserEntity map(UserInfo userInfo, Long orgaId);
当组织已经存在时,我会将其分配给我的UserEntity
,如:
user.setOrganisation(organisationEntity);
而不是实例化新对象。
问题解决了!