gpt4 book ai didi

java - Hibernate 多对多关系

转载 作者:行者123 更新时间:2023-11-28 23:50:11 25 4
gpt4 key购买 nike

我正在尝试使用 Hibernate 和 MySQL DB 实现多对多关系。我有类用户:

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "users_nodes",
joinColumns = {@JoinColumn(name = "user_id")},
inverseJoinColumns = {@JoinColumn(name = "node_id")})
private List<Node> nodeList;

和类节点:

@ManyToMany(mappedBy = "nodeList", cascade = CascadeType.ALL)
private List<User> users;

当我尝试将新节点保存到数据库(其中已有用户)时,它成功地将新实体添加到“节点”表,但关系表“users_nodes”为空。

这是我保存节点实体的方式:

@Override @Transactional
public void persist(Node entity) {
getCurrentSession().save(entity);
}

感谢您的帮助!

最佳答案

您必须更新关联的所有者端 (User.nodeList),这意味着您必须将 UserNode 相关联> 对于每个关联用户。例如:

class Node {
...
public void addUser(User user) {
if (!users.contains(user)) {
users.add(user);
user.addNode(this);
}
}
}

class User {
...
public void addNode(Node node) {
if (!nodeList.contains(node)) {
nodeList.add(node);
node.addUser(this);
}
}
}

如果这会是一个性能问题(如果 User 有很多 Nodes,那么在将新节点与所需用户相关联时加载它们会很昂贵) ,您可以更改您的映射,以便 Node 是关联的所有者和/或您可以考虑描述的其他选项和改进 here .

关于java - Hibernate 多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32768749/

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