Hibernate OneToMany 双向关系很慢

Ole*_*han 5 java hibernate bidirectional one-to-many

我有SessionsUsers类与以下bi-directional 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我为用户创建新会话的代码:

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
Run Code Online (Sandbox Code Playgroud)

用户有 2k 个会话,因此最后一行非常慢。

如何在不获取整个会话集合的情况下将会话与用户链接?

Bal*_*eth 4

看一下 Hibernate 的超延迟加载功能。您可以通过使用 注释您的集合来实现这一点@LazyCollection(LazyCollectionOption.EXTRA)。有一个例子可以看一下,并且Set这个例子中使用了。

public class Users {
    @OneToMany(fetch=FetchType.LAZY, mappedBy="users")
    @LazyCollection(LazyCollectionOption.EXTRA)
    public Set<Sessions> getSessionses() {
        return this.sessionses;
    }
}
Run Code Online (Sandbox Code Playgroud)