RequestFactory在Hibernate中设置为Lazy时急切地获取一个集合

时间:2012-09-18 15:16:43

标签: hibernate gwt lazy-loading requestfactory

在此代码中,我使用GWT RequestFactory

按用户名和密码获取用户
  userContextProvider.get().getUser(userName, password).with(extraData).
    fire(new Receiver<User>() {
        @Override
        public void onSuccess (User user) {
        //Do something  
        @Override
        public void onFailure(ServerFailure error) {
          //Error
        }
    });

用户可以有一个或多个组,所以通常情况下,在extraData中我会有

String [] extraData = {groups};

在我的DAO中,我像这样获取用户

   Criteria c = session.createCriteria(User.class);
   c.add(Restrictions.eq("user", username));
   c.add(Restrictions.eq("password", password));            
   utilisateur =  (Utilisateur) c.uniqueResult();

在User模型中,组集合设置为lazy

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "users")
    public List<Group> getGroups() {
        return this.groups;
    }

但是,在Hibernate日志中,我看到两个查询,一个针对用户(确定),另一个针对小组

我的问题是:RequestFactory中的with是否覆盖了Hibernate的延迟加载是否正常?以及如何解决它?

1 个答案:

答案 0 :(得分:3)

想一想发生了什么。

您在一个请求中要求用户实体及其组。因此,服务器准备用户和组将它们发送回GWT客户端应用程序。

如果你想在客户端进行延迟抓取,那么请求用户,然后在需要时询问其组,作为单独的请求(具有单独的RequestContext实例,Receiver和致电fire()