我将使用带有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
}
组
@Entity
@Table(name = "GROUPS")
public class Group {
@OneToMany(mappedBy = "group")
private Set<UserGroup> userGroups
}
用户组
@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;
}
当我将用户和组对象设置为用户组并保存时。
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);
事情进展顺利。使用CascadeType.ALL
,组对象和用户对象也会被更新。但是当我删除userGroup对象时,子对象也会被删除。
严格禁止删除子对象。
JPA中没有CascadeType.SAVE-UPDATE
,它只保存或更新但不删除。我该如何实现这一点。
如果我从映射中删除CascadeType.ALL
,子对象就不会得到更新,而我需要更新它们。