RequestFactorysの()メソッドに基づいてJPA検索クエリをカスタマイズする方法
-
11-12-2019 - |
質問
My GWT 2.4.0アプリケーションI SementFactoryと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を通して行われた要求の詳細にアクセスする方法はありますか?
クライアントコードがエージェントの管理者を必要とすることを知っていれば、私の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();
}
.
任意の洞察が高くなるでしょう。事前にありがとうございます。
解決
これは残念ながら不可能です。with()
に加えて、メソッドへの追加の引数として情報を渡す必要があります。
FYIは、2年前にGoogle Waveで議論された(ローカルバックアップコピーを持っていますが、それ以外はWeb上で見つかっています)、いくつかの提案があります(オプションのSet<String>
がサービスへの最後の引数として渡されます。メソッド - findAgent
メソッド、またはスレッドローカルプロパティリスト)。
このようなものは何も実装されていません、そしてRetrospectで私はそれがそれがそうでなければならないということはありません:あなたのメソッドへの引数として明示的に情報を渡すことはより明確/ magic をより明確に渡します。