gpt4 book ai didi

java - 复制具有关联角色的新用户

转载 作者:行者123 更新时间:2023-12-01 19:57:03 24 4
gpt4 key购买 nike

我想要做的是获取数据用户并复制到新用户(创建新用户)。这就是我正在做的事情:

@Entity
@Table(name = "role")
public class Role {

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

@Column(name = "role")
private String role;

public Role() {
}
}


@Entity
@Table(name = "usuario")
public class Users {

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


@Column(name = "email")
private String email;

@Column(name = "password", nullable=false, length=60)
private String password;

@Column(name = "name", unique=true, nullable=false, length=6)
private String name;


@Column(name = "last_name")
private String lastName;

@Column(name = "active", nullable=false)
private int active;


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

public Users() {
}

}

我从一位现有用户那里获取数据:

Optional<Users> user = usersRepository.findByName(name);

//create a new User to persist
Users newUser = new Users();
newUser.setName("new name");
newUser.setActive(1);
newUser.setEmail(user.get().getEmail());
newUser.setLastName(user.get().getLastName());
newUser.setPassword(user.get().getPassword());
Set<Role> roles = user.get().getRoles();

newUser.setRoles(roles);
usersRepository.save(newUser);

我收到此消息:

发现对集合的共享引用:model.authentication.Users.roles;嵌套异常是org.hibernate.HibernateException:找到对集合的共享引用:model.authentication.Users.roles

更新 1(已解决)

        Optional<Users> user = usersRepository.findByName(codalojamiento);
Users newUser = new Users();
newUser.setName("new name");
newUser.setActive(1);
newUser.setEmail(user.get().getEmail());
newUser.setLastName(user.get().getLastName());
newUser.setPassword(user.get().getPassword());
Set<Role> newRoles = new HashSet();
Set<Role> roles = user.get().getRoles();
for (Role r : roles) {
newRoles.add(r);
}
newUser.setRoles(newRoles);
usersRepository.save(newUser);

有什么建议吗?谢谢

最佳答案

有多种情况可能会出错:

  • 由于您将一个用户链接到多个角色,但同时多个用户可以拥有相同的角色,因此关系应该是@ManyToMany,而不是@OneToMany。
  • 其次,如果您坚持拥有 @OneToMany 关系,则会将新用户链接到现有用户的角色,因此解决方案可能是为该用户创建与第一个角色相同的新角色用户

就个人而言,我建议使用@ManyToMany,这应该可以解决问题

关于java - 复制具有关联角色的新用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49298847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com