私の組織は、Hibernate を使用して Spring MVC に取り組んでいます。person や contactList のように、常にマッピング ファイルで外部キー制約を指定します。Person.hbm.xml
<set name="ContactList">
<key column="PersonId" foreign-key="Fk_Peson_Contact"/>
<one-to-many class="Sample.Model.Contact"/>
</set>
Person
このマッピングにより、 と の間に1 対多の関係が作成され、テーブルの外部キー列としてContact
保持されます。PersonID
Contact
しかし、現在、組織はマッピング ファイルでいかなる種類の関係についても言及しないことを決定しました。つまり、上記の場合、マッピングには、保持する列を作成するプロパティが含まれるPerson
代わりに、1 対多のマッピングは一切含まれません。このシナリオの表では、 と は同じように見えますが、違いは と の間に関係がなく、マッピングが指定されていないことです。Contact
<property name="FK_PersonID"/>
personID
Person
Contact
Person
Contact
そのような場合、人の contactList を取得したい場合は、2 つのクエリを起動して、1 つはその contactList の別の人物を取得する必要があります。personList とその contactList を取得したい場合、For loop
PersonList を取得し、その ContactList を取得する必要があります。これにより、多数のクエリが起動されます。
関係を特定しない理由を尋ねると、先輩はこう言いました。
外部キーが DB にある場合、スライシングとパーティショニングは実行できません。
結合クエリ DB を起動すると、DB の実行に時間がかかります。これにより、DB サーバーが遅くなる可能性があります。
しかし、私の質問は -
For looping
personList で行うと、連絡先を取得するために多数のクエリが実行されますが、それは実行可能ですか?このようなループは、アプリケーションまたはアプリケーション サーバーの速度を低下させる可能性がありますか?
conatctList、AddressList、QualificationList を使用して personList を取得したい場合はどうすればよいですか? これにより n+1 の問題が発生しますか?
マッピングを指定するかどうかにかかわらず、どちらのシナリオがより有益であるか。