我有以下实体:
球队
@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>());
该列表将被重置,并且由于级联,先前的列表将被删除。
任何帮助表示赞赏。谢谢
team.setUserTeamRoles(new HashSet<UserTeamRole>());
),而必须替换clear()
为现有集合。发生这种情况是因为,如果Hibernate从DB加载了实体(及其集合),它将“管理”它们。跟踪他们的更改。通常,在使用Hibernate时,最好 不要 为集合(列表,集合)创建任何设置器。仅创建吸气剂,并清除其返回的集合,即:team.getUserTeamRoles().clear();
@OneToMany(orphanRemoval=true)
拥有实体。我已经创建了纸张和Mcq问题之间的映射如下。 } 当我更新纸质实体时,它会删除所有MCQ。 SQL输出:
问题内容: 我在Hibernate中有标准协会。更新时,我正在创建新实体(使用关键字),并用必要的值(还插入ID)填充它。值来自UI。以相同的方式,我创建了子对象的新集合,用值(也插入了ID)填充每个子对象,并将集合存储在父对象中(使用setter或按方法)。 所以我的问题是:如何在更新父级时删除父级集合中的所有对象,并用新的集合替换它们。在新集合中,某些对象确实是新对象,而某些对象仅需要更新(它
注意:如果我只有一个孩子,我可以删除它,没有任何例外,如果我有2个或更多的孩子,我有一个例外。 谢谢你的帮助!
我试图解决这个问题已经有一段时间了,但我还没有实现100%的解决方案。首先,我必须描述我的问题。我正在开发一个餐厅应用程序,在所有实体中,我有实体成分,正如你们所知,成分可以由特定数量的其他成分组成。所以我创建了一个实体子成分,带有一个嵌入的Id。 为了保留子成分列表,我尝试了级联和去除孤儿的组合,每种组合对某些操作有效,但对其他操作无效。 我从使用CascadeType开始。所有和新的子成分成功
我有两个具有一个任意关系的表 类ServiceProvider{ ... @OneTomany(Fetch=FetchType.Eager,MappedBy=“ServiceProvider”,Cascade={CascadeType.All,CascadeType.Remove},OlphanRemove=true)@OnDelete(action=OnDeleteAction.Cascade)
问题内容: 假设我们有3个Entities对象类: 如何使用JPA2.x(或hibernate)批注来: 父级删除时(一对多)自动删除所有子级 删除后自动从子级列表中删除子级(多对一) 儿童删除时(一对一)自动删除玩具 我正在使用Hibernate 4.3.5和mysql 5.1.30。 谢谢 问题答案: 如本文所述, 实体状态转换应从父级到子级联,而不是相反。 您需要这样的东西: