我正在使用带有JPA注释的hibernate进行关系映射.我的代码中有三个实体User Group&User_Group
User和Group正在建立ManyToMany关系.
User_Group是一个有点桥牌表,但有一些额外的领域.所以这是修改后的映射代码.
用户
@Entity
@Table(name = "USERS")
public class User {
@OneToMany(mappedBy = "user")
private Set<UserGroup> userGroups
}
Run Code Online (Sandbox Code Playgroud)
组
@Entity
@Table(name = "GROUPS")
public class Group {
@OneToMany(mappedBy = "group")
private Set<UserGroup> userGroups
}
Run Code Online (Sandbox Code Playgroud)
用户组
@Entity
@Table(name = "USERS_GROUPS")
public class UserGroup {
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "USER_ID")
private User user;
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "GROUP_ID")
private Group group;
}
Run Code Online (Sandbox Code Playgroud)
当我将用户和组对象设置为用户组并保存时.
User user = new User("tommy", "ymmot", "tommy@gmail.com");
Group group = new Group("Coders");
UserGroup userGroup = new UserGroup();
userGroup.setGroup(group);
userGroup.setUser(user);
userGroup.setActivated(true);
userGroup.setRegisteredDate(new Date());
session.save(userGroup);
Run Code Online (Sandbox Code Playgroud)
事情很好.随着CascadeType.ALL组对象和用户对象也被更新.但是当我删除userGroup对象时.子对象也被删除.
删除子对象是严格禁止的.
CascadeType.SAVE-UPDATE在JPA 中没有,它只是保存或更新但没有删除.我如何实现这一目标.
如果我CascadeType.ALL从映射中删除子对象不会更新,我需要更新它们.
SAVE_UPDATE用于save(),update()和saveOrUpdate(),它们是3种Hibernate专有方法.JPA只有persist()和merge().因此,如果您想在Hibernate专有方法上使用级联,则需要使用Hibernate专有注释.在这种情况下,Cascade.
或者您可以停止使用Hibernate会话,而是使用标准的JPA API.
Cascade.ALL也包含DELETE。我猜解决方案是使用除DELETE之外的所有重要的Cascade类型,所以:
@ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE}))
Run Code Online (Sandbox Code Playgroud)
在您的用户组定义中。
| 归档时间: |
|
| 查看次数: |
12054 次 |
| 最近记录: |