JPA2.0を使用して、hibernateを使用してエンティティモデルを設計しようとしています。JPAエンティティモデルの提案
私はこのようなドメインを持っています:たくさんのレストランがありますので、明らかにレストランの実体があります。各レストランにはさまざまな種類の料理が用意されており、0対多数のレストランでも同じことができます。各料理にはいくつかの食材があり、いくつかの料理は食材を共有します。各成分にはいくつかの栄養素があり、それぞれの栄養素は成分の0から多くのものによって所有されているかもしれません。
Imは私の問題が何であるかを正確には確信していないので、苦労していますが、私は何かが欠けていることを知っています。私はドメインモデルをどのように正確に実行するか、主キーと.equals/.hashcodeメソッドにどのような影響があるかという疑問があると考えています。
元私は、生成された代理キーを使用する予定でした。各エンティティは
@Id
@GeneratedValue
public Long id;
のようなものを持っているでしょうそして.equalsは、IDを除くすべてのエンティティのメンバーの平等をテストします。たとえば、レストランはLong IDの値にかかわらず同じですが、Listメンバーの等価性になります。 (もちろん食べ物は栄養素にhirarchyのすべてのteh方法を呼び出すことを続けるだろう)
私はDAO beanにレストランを与えるとき、私はデータストアに同等のレストランはない.equalsを介して)。しかし、私はそれがエレガントで効率的でない(私が間違っているかどうか私に知らせてください、私はしばしば間違っている...笑)見つけることはありません、面倒なjpql呼び出しを含むだろうと思います。さらに進んだところで、既にデータストアに入っていた(しかし、新たに保存されていなかった料理の一部である)食材を遭遇した場合、全く新しいものを作り出すのではなく、論理的に複写する)。
私はそれについてもっと考えていたほど、この階層の中で物事をより高く維持するのはより痛いものでした。
私は、それ自身が子メンバーを保持する複合Key(@IdClassまたは@EmbeddedId経由)の考え方を調べ始めました。これは、階層構造の上位にあるものを永続させるようなものは、idで検索するだけでなく、何かを見つけられなくても持続するように思えます。しかし、私はこれについて非常に疑わしいです...それは正しいように見えません。それは、すべてのメンバーとエンティティ自身と複合キーの一部であるエンティティを作成していることを意味します。
注意すべき事項比較的限られた量の栄養素があります。食材のためのスペースは{numOfNutrients}^{typesOfNutrients}であり、これはかなり大きい可能性があります。私たちがレストランに着く頃には、スペースが本当に大きくなるため、クライアントがアクセスして複製レストランを構築することはほとんど不可能になります。データ・ストアに複製があるかどうかは気にしませんが、それは起こりそうもないためです。実際には、これが起こったかどうかを知ることはほぼ面白いでしょう。また、レストランの例が考案されているわけでもありません。私の本物のドメインは形は似ています。
お散歩に申し訳ありません。私はポストに多くのアイデアがあることを知っています。しかし、私は彼らがすべてとても関連していると感じ、私はそれらを一気に上げたかった。
誰かが魔法使いを提供できますか?
私はこのポストを知っています:A class that behaves like @Entity and @Embeddable 通常、私は "特別な場合を除いて"これをしないでください。私はこれらの事件の1つについて話していますか?そうでない場合は、これを使用するのに適切なケースは何でしょうか。
レストランがデータベースに入れられると、その表現は変更できません。私はこれが実際の例では非現実的であることを認識していますが、私のドメインの場合はそうです。これは私が複合キーのすべてのメンバーを作ることが行く方法だと思います。
私は '等しい'部分を理解しませんでした。レストランR1とR2は、両方ともサーバーDishes(D1、D2、D3)と言います。それで、彼らは平等で許可されていませんか? – Kent
レストランR1とR2は同じ料理のリストを保持していれば同じです。すべての料理で.equalsをチェックして決定します。それはある意味で再帰的です。 R1:(D1、D2、D3)== R2 :(D1、D2、D3)、ただしR1(D1、D2、D3)!= R3:(D1、D6)だから、0-多くのレストランで料理を提供することができます。 – b3bop