无法仅提供嵌套对象的 ID 来保存主对象 - 给出 TransientObjectException 使用多对多关系

问题描述 投票:0回答:1

首先介绍一下我的整个问题, 我有一个像这样的 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,但仍然遇到相同的错误。

spring-boot hibernate spring-data-jpa many-to-many cascade
1个回答
0
投票

您可以先从数据库中找到角色并将其设置为userEntity,然后将其保存到数据库中

© www.soinside.com 2019 - 2024. All rights reserved.