gpt4 book ai didi

java - Hibernate 级联类型保存更新

转载 作者:搜寻专家 更新时间:2023-10-31 08:25:36 24 4
gpt4 key购买 nike

我正在使用带有 JPA 注释的 Hibernate 来进行关系映射。我的代码中有三个实体 User Group & User_Group

UserGroup 处于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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com