簡體   English   中英

Hibernate OneToMany雙向關系很慢

[英]Hibernate OneToMany bi-directional relation is slow

我有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 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會話,因此最后一行非常慢。

如何在不提取整個會話集合的情況下將會話與用戶鏈接?

看看Hibernate的超延遲加載功能。 您可以通過使用@LazyCollection(LazyCollectionOption.EXTRA)注釋集合來啟用它。 這個例子可以看一下,在這個中使用了Set

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

我不能肯定,如果休眠想補充一點連接兩種方式,但不是增加一個SessionUser設置User A的Session 這樣您就不必加載每個會話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM