大佬教程收集整理的这篇文章主要介绍了Hibernate @OneToMany在更新父级时从列表中删除子级,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
team.setUserTeamRoles(new HashSet<UserTeamRole>());
),而必须替换clear()
为现有集合。发生这种情况是因为,如果Hibernate从DB加载了实体(及其集合),它将“管理”它们。跟踪他们的更改。通常,在使用Hibernate时,最好 为集合(列表,集合)创建任何设置器。仅创建吸气剂,并清除其返回的集合,即:team.getUserTeamRoles().clear();
@OnetoMany(orphanRemoval=truE)
拥有实体。我有以下实体:
球队
@Entity
@Table
public class Team {
[..]
private Set<UserTeamRole> userTeamRoles;
/**
* @return the userTeamRoles
*/
@OneToMany(cascade = { CascadeType.ALL },mappedBy = "team",fetch = FetchType.LAZY)
public Set<UserTeamRole> getUserTeamRoles() {
return userTeamRoles;
}
/**
* @param userTeamRoles
* the userTeamRoles to set
*/
public void setUserTeamRoles(Set<UserTeamRole> userTeamRoles) {
thiS.UserTeamRoles = userTeamRoles;
}
}
和
user_TEAM_ROLE
@Entity
@Table(name = "user_team_role")
public class UserTeamRole {
@manyToOne(cascade = CascadeType.MERGE,fetch = FetchType.LAZY)
@Joincolumn(name = "FK_TeamId")
public Team getTeam() {
return team;
}
}
现在,当使用{UTR1,UTR3}更新包含例如Team.userTeamRoles =
{UTR1,UTR2}的Team实体时,我希望删除UTR2。但是我现在的方法是,旧列表保持不变,并且只将uTR3添加到列表中。
这是我目前的做法:
if (!usersDualListData.getTarget().isEmpty()) {
// the role for each user within the team will be "employee"
team.setUserTeamRoles(new HashSet<UserTeamRole>());
Role roleForUser = roleservice
.getRoleByName(Rolenames.ROLE_emploYEE.name());
for (User user : usersDualListData.getTarget()) {
UserTeamRole utr = new UserTeamRole();
utr.setUser(user);
utr.setTeam(team);
utr.setRole(roleForUser);
team.getUserTeamRoles().add(utr);
}
}
teamservice.updateTeam(team);
我认为通过执行team.setUserTeamRoles(new
HashSet<UserTeamRole>());
该列表将被重置,并且由于级联,先前的列表将被删除。
任何帮助表示赞赏。谢谢
以上是大佬教程为你收集整理的Hibernate @OneToMany在更新父级时从列表中删除子级全部内容,希望文章能够帮你解决Hibernate @OneToMany在更新父级时从列表中删除子级所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。