gpt4 book ai didi

hibernate @ManyToMany 删除关系

转载 作者:行者123 更新时间:2023-12-04 17:59:33 27 4
gpt4 key购买 nike

我有 2 个实体:User 和 UsersList。

@Entity
@Table(name = "USERS")
public class User {
@Id
@GeneratedValue
@Column(name = "ID")
private Long id;

@ManyToMany(cascade = CascadeType.REMOVE, mappedBy = "users")
private List<UsersList> usersLists = new ArrayList<UsersList>();

public List<UsersList> getUsersLists() {
return usersLists;
}

public void setUsersLists(List<UsersList> usersLists) {
this.usersLists = usersLists;
}
}


@Entity
@Table(name = "USERS_LIST")
public class UsersList {
@Id
@GeneratedValue
@Column(name = "ID")
private Long id;

@ManyToMany
private List<User> users = new ArrayList<User>();

public List<User> getUsers() {
return users;
}

public void setUsers(List<User> users) {
this.users = users;
}
}

和这样的代码:
// 1
List<User> dbUsers; // 3 the user instances are persisted in DB
UsersList usersList = new UsersList();
usersList.setUsers(dbUsers);

// 2 - now persist the usersList using hibernate...
saveWithHibernate(usersList);

//3 - delete using a persisted user
deleteWithHibernate(dbUsers.get(0).getId());

在哪里
deleteWithHibernate(Long id) {
User usr = hibernateTemplate.get(User.class, id);
hibernateTemplate.delete(usr);
}

在步骤 1 中,我在 USERS (USER_ID) 表中有 3 行。

在第 2 步(第二条评论)之后,我在 USERS_LIST (USERS_LIST_ID) 表中有 1 行并进入连接表 USERS_LIST_USERS (USER_ID, USERS_LIST_ID) 3 行。

我想在第 3 步中实现以下目标:当我从表 USERS 中删除一个用户时 - 假设用户的 USER_ID = 4,我只想删除连接表中 USER_ID = 4 的行,以及其他人保持。

我的问题有注释解决方案吗?

最佳答案

你需要的是@JoinTable 属性:

Hibernate 不知道多对多关系相互引用,并且可能会创建两个连接表。如果在关系的两侧指定相同的 @JoinTable,它将按预期工作。

确保 joinColumn 和 inverseJoinColumn 在对立面是对立的
关系的双方。

  • 一侧的 joinColumn == 另一侧的 inverseJoinColumn
  • 一侧的 inverseJoinColumn == 另一侧的 joinColumn

  • 我希望这有帮助。
    @Entity
    public class Role extends Identifiable {

    @ManyToMany(cascade ={CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
    @JoinTable(name="Role_Permission",
    joinColumns=@JoinColumn(name="Role_id"),
    inverseJoinColumns=@JoinColumn(name="Permission_id")
    )
    public List<Permission> getPermissions() {
    return permissions;
    }

    public void setPermissions(List<Permission> permissions) {
    this.permissions = permissions;
    }
    }

    @Entity
    public class Permission extends Identifiable {

    @ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
    @JoinTable(name="Role_Permission",
    joinColumns=@JoinColumn(name="Permission_id"),
    inverseJoinColumns=@JoinColumn(name="Role_id")
    )
    public List<Role> getRoles() {
    return roles;
    }

    public void setRoles(List<Role> roles) {
    this.roles = roles;
    }

    }

    关于 hibernate @ManyToMany 删除关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1299455/

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