我的组织使用 Hibernate 在 Spring MVC 上工作。我们总是在映射文件中指定外键约束,例如对于 person 和 contactListPerson.hbm.xml
<set name="ContactList">
<key column="PersonId" foreign-key="Fk_Peson_Contact"/>
<one-to-many class="Sample.Model.Contact"/>
</set>
Person
此映射将在和之间创建一对多关系Contact
,并作为外键列保留PersonID
在Contact
表中。
但是,现在组织决定不在映射文件中提及任何类型的关系,这意味着在上述情况下,Person
映射将不会有任何类型的一对多映射,而不是这种Contact
映射将具有<property name="FK_PersonID"/>
创建列来保存的属性personID
。在这个场景表中Person
,Contact
看起来相同,但不同之处在于它们之间没有关系Person
,Contact
因为没有指定映射。
在这种情况下,如果我们想获取人员的联系人列表,那么我们必须触发两个查询,一个来获取另一个人的联系人列表。假设我们想用它的contactList来获取personList,那么我们必须For loop
在PersonList上获取它的ContactList,这将触发一些查询。
当我问为什么不指定关系时,前辈说,
如果外键在数据库中,那么我们不能进行切片和分区。
当我们触发连接查询时,数据库需要更多时间来执行它。这可能会降低数据库服务器的速度。
但是,我的问题是——
如果我
For looping
在 personList 上做,那么它会触发一些查询来获取联系人是否可行?这种循环会减慢应用程序或应用程序服务器的速度吗?
如果我想用它的 conatctList、AddressList、QualificationList 获取 personList 怎么办,这会导致 n+1 问题吗?
指定映射与不指定哪个场景更有利。