作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用带有 JPA 注释的 Hibernate 来进行关系映射。我的代码中有三个实体 User
Group
& User_Group
User
和 Group
处于ManyToMany
关系中。
User_Group
有点像 bridge table but with some additional fields .所以这里是修改后的映射代码。
用户
@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
,则子对象不会更新,我需要更新它们。
最佳答案
SAVE_UPDATE 用于 save()、update() 和 saveOrUpdate(),这是 3 个 Hibernate 专有方法。 JPA 只有persist()
和merge()
。因此,如果您想在 Hibernate 专有方法上使用级联,则需要使用 Hibernate 专有注释。在这种情况下,Cascade .
或者您可以停止使用 Hibernate Session,而是使用标准的 JPA API。
关于java - Hibernate 级联类型保存更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34576803/
我是一名优秀的程序员,十分优秀!