Я искал решение здесь и нашел тихий точный вопрос здесь Как сохранить дочернюю сущность Hibernate без загрузки коллекции Set родительской стороны Однако некоторые методы устарели, и я столкнулся с тем жепроблема.При сохранении дочерней сущности в родительской коллекции Hibernate выбирает все сущности из родительской коллекции, что влияет на время отклика.
User.java в качестве дочернего
@ManyToMany(mappedBy = "users")
private Set<UserGroup> userGroups;
public void addGroup(UserGroup userGroup){
this.userGroups.add(userGroup);
userGroup.addUser(this);
}
Добавление группы пользователейк коллекции userGroups также добавьте пользователя в коллекцию пользователей этой группы, как показано ниже.
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 запросов, но все же выбирает всех пользователей из набора пользователей в одном запросе.Как вообще избежать выбора пользователей по ранее прикрепленной ссылке, так как это пустая трата ресурсов, когда мне не нужно извлекать пользователей в наборе, а требуется только вставить туда пользователя.