1

在我的 GWT 2.4.0 应用程序中,我使用 RequestFactory 和 Hibernate/JPA。我有一个实体,它通过关系Agent有很多。此关联已加载。因此,当调用查找服务时,不会加载代理的管理员,这在大多数情况下是所需的行为。Administrators@OneToManyLAZY

但是,我希望能够在使用 with 方法在客户端代码上触发 requestFactory 请求时表明我希望代理的管理员回来。所以我的客户端代码看起来像:

RequestContext.findAgent(agentId).with("administrstors").fire()

我的服务器端服务看起来像这样:

public Agent findAgent(Long id) {
    return getEntityManager().createQuery("SELECT a" +
            " FROM Agent" +
            " WHERE a.id=:id", Agent.class)
            .setParameter("id", id)
            .getSingleResult();
}

我希望能够弄清楚是否使用 with 方法发送请求。我需要自定义 JPA 查询以加载代理的管理员,以防客户端使用。有没有办法访问通过服务器端的 RequestFactory 发出的请求的详细信息?

如果我知道客户端代码需要代理管理员,我的 JPA 查询将如下所示:

public Agent findAgent(Long id) {
    return getEntityManager().createQuery("SELECT a" +
            " FROM Agent a LEFT JOIN a.administrators admin" +
            " WHERE a.id=:id", Agent.class)
            .setParameter("id", id)
            .getSingleResult();
}

任何见解将不胜感激。提前致谢。

4

1 回答 1

0

不幸的是,这是不可能的;除了with().

仅供参考,这是 2 年前在 Google Wave 中讨论的(我有一个本地备份副本,但在网络上找不到其他地方),有几个建议(Set<String>作为最后一个参数传递给服务方法的可选参数 - 你的findAgent方法–,或线程本地属性列表)。
虽然没有实现这样的功能,回想起来我不确定它是否应该:将信息作为参数显式传递给您的方法更加明确/其中的魔力更少。

于 2012-07-25T18:11:31.453 回答