У меня есть классы (UserSet и User), которые имеют отношение «многие ко многим» (то есть каждый пользователь может принадлежать к некоторым наборам пользователей). В базе данных есть таблица пользовательских наборов, пользовательская таблица и промежуточная таблица (UsersToUserSets).
Теперь, если я хочу удалить пользователя из UserSet, сделав
userSet.getUsers().remove(user);
session.flush()
Hibernate сначала выбирает всех пользователей, принадлежащих userSet, а затем удаляет одного пользователя и обновляет таблицу 'inbetween'.
Поскольку могут быть тысячи пользователей, принадлежащих к UserSet, это очень плохо сказывается на производительности. Есть ли способ избежать загрузки всех пользователей?
Интересные части файлов сопоставления выглядят так:
<class name="...UserSet">
...
<set name="users" table="T_UM_USERS2USER_SETS">
<key column="FK_USER_SET_ID" />
<many-to-many column="FK_USER_ID"
class="...User" />
</set>
...
</class>
<class name="...User">
...
<set name="userSets" table="T_UM_USERS2USER_SETS" inverse="true">
<key column="FK_USER_ID" />
<many-to-many column="FK_USER_SET_ID" class="...UserSet" />
</set>
</class>