首先介绍一下我的整个问题, 我有一个像这样的 UserEntity
@Entity
public class UserEntity extends IdDescriptionStateMetaEntity {
//.. other members
@ManyToMany
@JoinTable(
name = "role_user",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private List<RoleEntity> roles;
// getter and setter
}
并且还有 RoleEntity
@Entity public class RoleEntity extends IdDescriptionStateMetaEntity { //fields related to role }
现在,我在数据库中始终拥有 ID 1 的角色。
我只想保存 UserEntity 并提供角色 ID。因为角色始终存在于数据库中。
@Transactional
public UserEntity createUser(){
UserEntity userEntity = new UserEntity();
List<RoleEntity> roleEntities = new ArrayList<>();
RoleEntity roleEntity = new RoleEntity();
roleEntity.setId("1");
roleEntities.add(roleEntity);
userEntity.setRoles(roleEntities);
userEntity = userRepository.save(userEntity);
return userEntity;
}
当上述方法调用时,会出现异常
TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.model.RoleEntity
我尝试在manytomany注释中给出Cascade.Merge,但仍然遇到相同的错误。
您可以先从数据库中找到角色并将其设置为userEntity,然后将其保存到数据库中