5

私は次のマッピングを持つクラスを持っSessionsています(休止状態のリバースエンジニアリングツールで生成されました):Usersbi-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;
    }
}

そして、これがユーザーの新しいセッションを作成する私のコードです:

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

ユーザーには 2,000 のセッションがあるため、最後の行は非常に遅くなります。

セッションコレクション全体を取得せずにセッションをユーザーにリンクするにはどうすればよいですか?

4

2 に答える 2

1

Sessionhibernate がこの接続を両方の方法で追加するかどうかはわかりませんが、 a のUserセットにUseraを追加する代わりにSession. この方法では、すべてのセッションをロードする必要はありません。

于 2013-05-15T10:17:23.117 に答える