我有 Sessions
和 Users
类,具有以下 bi-directional
OneToMany
映射(使用 hibernate 逆向工程生成工具):
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 的代码:
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 个 session ,因此最后一行非常慢。
如何在不获取整个 session 集合的情况下将 session 与用户链接?
最佳答案
看看 Hibernate 的 extra-lazy loading特征。
您可以通过使用 @LazyCollection(LazyCollectionOption.EXTRA)
注释您的集合来启用它。有 this example看一下,在this one中使用了Set
.
public class Users {
@OneToMany(fetch=FetchType.LAZY, mappedBy="users")
@LazyCollection(LazyCollectionOption.EXTRA)
public Set<Sessions> getSessionses() {
return this.sessionses;
}
}
关于java - Hibernate OneToMany 双向关系很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16561907/