簡體   English   中英

休眠多對多關系

[英]Hibernate Many-to-Many relation

我正在嘗試使用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”為空。

這是我保存Node實體的方式:

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

謝謝你的幫助!

您必須更新關聯的所有者端( User.nodeList ),這意味着必須將User與每個關聯用戶的Node關聯。 例如:

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);
    }
  }
}

如果這是一個性能問題(如果UserNodes很多,那么在將新節點與所需用戶相關聯時將它們全部加載會很昂貴),則可以更改映射,以使Node是該關聯的所有者和/或者您可以考慮此處介紹的其他選項和改進。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM