Java 如何在JPA Hibernate中只插入联接表而不插入引用表

Java 如何在JPA Hibernate中只插入联接表而不插入引用表,java,mysql,spring,hibernate,jpa,Java,Mysql,Spring,Hibernate,Jpa,我有两个实体User和Role。一个用户可以有多个角色,每个角色都可以与多个用户关联。i、 例如,用户角色有很多关系 用户Ram、Rob和John是管理员 我正在用户和角色之间创建一个连接表来存储信息 @Entity @Table(name = "account") @Data @AllArgsConstructor @NoArgsConstructor public class Account { @Id @GeneratedValue(strategy = Generati

我有两个实体
User
Role
。一个用户可以有多个角色,每个角色都可以与多个用户关联。i、 例如,用户角色有很多关系

用户Ram、Rob和John是管理员

我正在用户和角色之间创建一个连接表来存储信息

@Entity
@Table(name = "account")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Account {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "user_id")
    private int id;

    @Column(unique = true)
    private String username;

    @Transient
    @JsonIgnore
    private String password;

    @ManyToMany(fetch = FetchType.EAGER,cascade = CascadeType.)
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles;

    @Column
    private boolean deleted;

}
在spring boot中执行此操作时,将创建以下表:
帐户
用户角色
角色

因为我的角色数量是固定的。我手动插入它们

INSERT INTO `role` VALUES (1,'ADMIN');
INSERT INTO `role` VALUES (2,'USER');
现在,从我的JavaSpring启动应用程序中,我尝试在account表中插入一个新条目。尝试在
角色
表中插入新条目。。。我只想在
帐户
用户角色
表中插入,但不想在
角色
表中插入

有人能告诉我怎么做吗

更新:

这里是账户插入部分(创建账户代码)

//创建帐户

public Account createAccount(AccountDto account) {

        Account newAccount = new Account();
        newAccount.setPassword(account.getPassword());
        newAccount.setUsername(account.getUsername());
        Set<Role> roles = new HashSet<Role>();
        Role role = new Role();
        role.setRole(account.getRole());
        roles.add(role);
        newAccount.setRoles(roles);
        Account savedAccount = save(newAccount);
        return savedAccount;
    }
public Account createAccount(AccountDto Account){
账户newAccount=新账户();
newAccount.setPassword(account.getPassword());
newAccount.setUsername(account.getUsername());
Set roles=new HashSet();
角色=新角色();
role.setRole(account.getRole());
角色。添加(角色);
newAccount.setRoles(角色);
账户savedAccount=保存(新账户);
返回savedAccount;
}
//更新帐户

public Account updateAccount(String oldUserName, AccountDto accountDto) {
        Account account = accountRepository.findByUsername(oldUserName);
        if (account != null) {
            Set<Role> roleset = new HashSet<Role>();
            if(accountDto.getRole() != null && !accountDto.getRole().isEmpty()){
                Role role = roleRepository.findByRole(accountDto.getRole());
                if (role == null) {
                    roleset.add(role);
                }
            }
            account.setRoles(roleset);
            account.setUsername(accountDto.getUsername());
            account = accountRepository.save(account);
            return account;
        } else
            return null;
    }
public Account updateAccount(字符串oldUserName,AccountDto到AccountDto){
Account Account=accountRepository.findByUsername(旧用户名);
如果(帐户!=null){
Set roleset=新的HashSet();
if(accountDto.getRole()!=null&&!accountDto.getRole().isEmpty()){
Role-Role=roleRepository.findByRole(accountDto.getRole());
如果(角色==null){
角色集。添加(角色);
}
}
account.setRoles(角色集);
account.setUsername(accountDto.getUsername());
account=accountRepository.save(account);
返回帐户;
}否则
返回null;
}

尝试在Account类中编译CascadeType

@ManyToMany(fetch = FetchType.EAGER,cascade = CascadeType.)
您还需要为帐户实体添加链接

@ManyToMany(fetch = FetchType.EAGER,
        cascade = {
            CascadeType.PERSIST,
            CascadeType.MERGE
        },
        mappedBy = "role")
private Set<Account> accounts = new Set<Account>();
@ManyToMany(fetch=FetchType.EAGER,
级联={
cascade type.PERSIST,
级联类型合并
},
mappedBy=“角色”)

私人设置

您的“在科目表中插入新条目”代码可能很有用。我认为您正在尝试通过将其角色设置为
newrole()
来插入新用户,而不是首先从db获取角色。“我尝试在account表中插入一个新条目”。。。怎么用?您有任何代码可以与我们共享吗?添加了带有插入和更新的@KamilNostercode@lealceldeiro补充code@stallion我不确定你是如何更新帐户的。
accountDto
在这里扮演什么角色?它是否应该将必须设置为
帐户的角色设置为
,或者它只是一个从数据库、某种存储库获取的数据访问对象?我得到了这个异常:由以下原因引起:org.hibernate.persistentObject异常:传递给persist的分离实体:com.techjava.springbootsecuritymysql.model.Role
@ManyToMany(fetch = FetchType.EAGER,
        cascade = {
            CascadeType.PERSIST,
            CascadeType.MERGE
        },
        mappedBy = "role")
private Set<Account> accounts = new Set<Account>();