我在这里寻找解决方案,在这里How to persist a Hibernate child entity without loading the parent-side Set collection找到了一个安静的确切问题 但是,不赞成使用某些方法,并且遇到了同样的问题。 当将子实体保留到父集合中时,Hibernate将从父集合中选择所有实体,这会影响响应时间。
User.java作为子对象
@ManyToMany(mappedBy = "users")
private Set<UserGroup> userGroups;
public void addGroup(UserGroup userGroup){
this.userGroups.add(userGroup);
userGroup.addUser(this);
}
将userGroup添加到userGroups集合还可以按照以下方式将用户添加到该组users集合中。
UserGroup.java作为父级
@ManyToMany
@Fetch(FetchMode.SUBSELECT)
@JoinTable(name = "group_users", joinColumns = @JoinColumn(name = "group_id"),
inverseJoinColumns = @JoinColumn(name = "user_id"))
private Set<User> users;
public void addUser(User user) {
this.users.add(user);
}
我添加了FetchMode.SUBSELECT来避免n + 1个查询问题,但它仅解决了n + 1个查询问题,仍然从一个查询中的“用户设置”中选择所有用户。 当我不需要获取集合中的用户,而只需要在此处插入用户时,如何避免完全按照先前附加的链接选择用户,这是浪费资源。