如何基于RequestFactorys的with()方法自定义JPA查找查询

时间:2012-07-25 17:28:30

标签: gwt jpa requestfactory

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

但是,我希望能够通过使用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发出的请求的详细信息?

如果我知道客户端代码需要代理tehn的管理员,我的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();
}

任何见解都将受到赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:0)

遗憾的是,这是不可能的;除了with()

之外,您还必须将信息作为方法的附加参数传递

仅供参考,2年前在Google Wave中讨论过(我有一个本地备份副本,但在网络上无处可寻),有几个提案(可选Set<String>作为最后一个提交服务方法的参数 - 您的findAgent方法 - 或线程 - 本地属性列表) 虽然没有这样的东西已经实现,但回想起来我不确定它应该:明确地将信息作为参数传递给你的方法是更明确/更少 magic