я Sessions
и Users
классов со следующими bi-directional
OneToMany
отображения (генерируюсь с обратным проектированием Hibernate инструмента):Hibernate OneToMany двунаправленная связь медленно
public class Users {
@OneToMany(fetch=FetchType.LAZY, mappedBy="users")
public Set<Sessions> getSessionses() {
return this.sessionses;
}
}
public class Sessions {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="USER_ID")
public Users getUsers() {
return this.users;
}
}
И вот мой код, который создает новую сессию для пользователя:
Session s = ...;
Users user = (Users) s.createCriteria(Users.class)
./*restrictions...*/.uniqueResult();
Sessions userSession = new Sessions();
userSession.setUsers(user);
s.save(userSession);
user.getSessionses().add(userSession); // here getSessionses() has 2k records
У пользователя есть 2k сеансов, поэтому последняя строка очень медленная.
Как я могу связать сеанс с пользователем, не получая целую коллекцию сессий?
Как вы загружаете объект 'user'? –
Вам действительно нужна коллекция? Когда вы добавляете в него элемент, hibernate необходимо загрузить элементы для проверки дубликатов – Guillaume
@Guillaume Set скорее является структурой данных мандата, навязанной Hibernate, чтобы сохранить уникальность. – sanbhat