У меня есть сущность User, сопоставленная пользователями в сущности UserGroup
USER.java
@ManyToMany(mappedBy = "users")
private Set<UserGroup> userGroups;
public void addGroup(UserGroup userGroup){
this.userGroups.add(userGroup);
userGroup.addUser(this);
}
UserGroup.java
@ManyToMany
@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);
}
У меня есть способ добавить группу к пользователю в UserService:
@Transactional
public void addGroupsToUser(UserAddGroupsCommand userAddGroupsCommand, String username) {
User user = userRepository.findByUsername(username);
if (user != null) {
List<UserGroup> userGroupList = userGroupRepository.findAllById(userAddGroupsCommand.getId());
for (UserGroup userGroup : userGroupList) {
user.addGroup(userGroup);
}
userRepository.save(user);
}
}
Проблема заключается в том, что когда я перебираю группы и добавляю пользователя в каждую группу, Hibernate по какой-то причине выбирает всех пользователей вэта группа (из таблицы соединений).
Hibernate:
select
users0_.group_id as group_id1_3_1_,
users0_.user_id as user_id2_3_1_,
user1_.id as id1_7_0_,
user1_.email as email2_7_0_,
user1_.firstname as firstnam3_7_0_,
user1_.is_admin as is_admin4_7_0_,
user1_.lastname as lastname5_7_0_,
user1_.password as password6_7_0_,
user1_.username as username7_7_0_
from
group_users users0_
inner join
user user1_
on users0_.user_id=user1_.id
where
users0_.group_id in (
select
usergroup0_.id
from
user_group usergroup0_
where
usergroup0_.id in (
? , ?
)
)
Как этого избежать?Есть ли возможность избежать этого без написания собственного запроса, только с помощью аннотаций и методов репозитория JPA?