我做了一些水平阅读,但无法找到正确的答案,这就是为什么这个理论问题:
我有一个案例,在数据模型中有很多一对映射(使用默认的提取策略)。随着数据的增长(只有几千条记录),检索性能非常差。当我查看生成的查询时,我观察到了很多Joins
。
微调过程的一部分,我试图从双向开始删除/修改不必要的关联。
我的问题是: 如果我们不需要导航安慰,我们是否需要关联(可能是一个可能/多个)。如果我们只是删除hbm文件中的关联并使其成为非null属性,那么可能会出现问题。
示例:(仅出于理解目的,这不是真实情况)。
<class name="Book" table="BOOK">
<property name="name" type="string">
<column name="Name" length="50" not-null="true" />
</property>
</class>
<class name="Shelf" table="SHELF">
<property name="code" type="string">
<column name="CODE" length="50" not-null="true" />
</property>
<one-to-many class="Book" column="bookId" />
</class>
如果我像下面那样更改Shelf
,我会破坏任何数据建模原则吗?
<class name="Shelf" table="SHELF">
<property name="code" type="string">
<column name="CODE" length="50" not-null="true" />
</property>
<property column="bookId" not-null="true"/>
</class>
任何意见都会受到赞赏。
答案 0 :(得分:1)
那,你在你的例子中所做的,仅在极少数情况下才有意义(例如,当我们想要分离2个模块时,我们使用它,这些模块必须彼此不知道,一个模块在不同的项目中重复使用)。 / p>
另一方面,LAZY Fetch类型是要走的路,因为它向后兼容当前行为(如果稍后遇到一些问题,你只需恢复FetchType,DB就不会受到任何修改)如果您需要它,您将来仍然可以导航到其他实体。除此之外,您还可以用POO语言对事物进行建模。
如果您仍然遇到FetchType.Lazy选项的任何性能问题,您应该尝试解决它们(尽管我怀疑您的示例会有任何性能提升)。
PS:可能会有人会给出更好的答案,但我会尽力回答这个问题。