@ManyToMany CascadeType.ALL 时,save报detached entity passed to persist

1、有2个实体,用户,角色、用户-角色中间表。关系以下:

public class User{
	@ManyToMany(cascade = CascadeType.ALL)
	@JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
	private Set<Group> groups = new HashSet<Group>();
	//省略 getter、setter
}

2、保存数据User代码以下:

User user = new User();
Group g = groupRepo.findById(8);//数据库查询
Set gruops = new HashSet<Group>();
gruops.add(g);
user.setGroups(gruops);
userRepo.save(user);

userRepo.save(user);保存数据时会出现错误detached entity passed to persist数据库

  • 错误缘由: 保存user时想去级联保存gruops。可是gruop已经有id值了。因此报错。
  • 解决方案,把user.setGroups(gruops);放到保存user以后。以下:
User user = new User();
userRepo.save(user); //先保存user

Group g = groupRepo.findById(8);//数据库查询
Set gruops = new HashSet<Group>();
gruops.add(g);
user.setGroups(gruops); //再设置groups
userRepo.save(user); //最后更新user
相关文章
相关标签/搜索