2017-06-23 6 views
0

私はCarと呼ばれるテーブルを持つデータベースを持っています。車のテーブルは次のようになります:Java Database Access Builder Patter

+----+------+--------------+-----------+----------+------+ 
| Id | Name | Desccription | Make | Model | Year | 
+----+------+--------------+-----------+----------+------+ 
| 1 | A | something1 | Ford  | Explorer | 2010 | 
| 2 | B | something2 | Nissan | Ultima | 2005 | 
| 3 | C | something3 | Chevrolet | Malibu | 2012 | 
+----+------+--------------+-----------+----------+------+ 

私のウェブサイトのページでは、別の情報を表示したいと考えています。いくつかのページは名前を表示したいだけで、他の人はメイクとモデルなどを表示したいものです。

私はこの情報をすべて取得するためにWebから呼び出されるAPIを持っています。 APIは、JPAとQueryDSLを使用してデータベースと通信し、情報を取得します。私は、その特定のページに必要な情報だけを取得したいと思います。私は自分のレポにいくつかのビルダーパターンを実装することを考えています。私は自分が望むものだけを取り出せるようにしていますが、どうやってそれをどうやって行くのかははっきりしていません。

たとえば、私のホームページでは車の名前のみを表示したいとします。だから、HomeControllerを呼ぶだろうし、コントローラは、このような何かリポジトリ層を呼び出しますHomeService呼び出します。

carRepository.getCarById(1).withName().build(); 

製造元とモデルを表示したいいくつかの他のページでは、このようなレポコールになるだろうし。

carRepository.getCarById(1).withMake().withModel.build(); 

Java/Jpaでこれを実装する最良の方法は何ですか?

+0

私は、JPAの基本的なチュートリアルから始めて、JPAをもっと理解するために、あなたの車のAPIに組み込むことをお勧めします。それが書かれているように、この質問はそれほど広すぎます。 –

+0

@AndyGuibert私たちは実際にデータを取得するためのjpaプレーヤーを実際に持っていますが、問題は常にすべてのページを検索することです。 getByIdメソッドがあると、いくつかのページの情報が多すぎる車のエンティティ全体を取得します。そこで私たちはgetCarByIdForHomePageやgetCarByIdForAdminPageなどの特定のページのメソッドを作成し始めました。しかし、これはすぐに手を抜けるので、より良いアプローチがあるかどうか疑問に思っています – Richard

答えて

1

私が質問を正しく理解していれば、エンティティのさまざまな予測を動的に構築するためのクエリが必要になります。

この場合、動的エンティティグラフが必要です(例:https://www.thoughts-on-java.org/jpa-21-entity-graph-part-2-define/を参照)。空のエンティティグラフから始め、with()メソッドの1つを呼び出すたびに、グラフにフィールドが追加されます。

ベースクエリーは変更されません。build()を呼び出すと、フェッチグラフのヒント(javax.persistence.fetchgraph)を設定する必要があります(上記リンクのサンプルはフェッチグラフではなく負荷グラフを使用します。ここではWhat is the diffenece between FETCH and LOAD for Entity graph of JPA?

+0

パーフェクト!これは私が探していたものです! – Richard

関連する問題