java - Hibernate OneToMany 双向关系很慢

标签 java hibernate one-to-many bidirectional

我有 SessionsUsers 类,具有以下 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/

相关文章:

mysql - 如何设置具有可变列的 mysql 数据库结构?

java - 使用 jsp : any better approaches? 从 POST 表单中提取 100 多个输入数据

java - 如何将低版本java编译运行到高版本?

java - 实体无法解析为类型

java - 使用 jayspt 和 hibernate 查询数据

java - 如何从 Json 中保留 @OneToMany 和 @ManyToOne

python - Django 一对多模型

java - Android 阻止用户关闭应用程序

java - 优雅与效率 | java

java - JPA 一对一关系创建非唯一外键