0

我做了一些水平阅读,但无法找到正确的答案,这就是为什么这个理论问题:

我有一个案例,跨数据模型有很多多一映射(使用默认获取策略)。随着数据的增长(只有几千条记录),检索性能非常糟糕。当我查看生成的查询时,我观察到很多Joins.

作为微调过程的一部分,我正在尝试删除/修改不必要的关联,从双向开始。

我的问题是: 如果我们不需要导航舒适度,我们是否需要关联(可能是 one-may/many-many)。如果我们简单地删除 hbm 文件中的关联并使其成为非空属性,可能会出现什么问题。

示例:(仅出于理解目的,这不是真实情况)。

<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>

任何输入将不胜感激。

4

1 回答 1

1

那,您在示例中所做的,仅在极少数情况下才有意义(例如,当我们想要分离 2 个模块时使用它,这两个模块必须彼此不知道,一个模块在不同的项目中被重用)。

另一方面,LAZY Fetch 类型是要走的路,因为它向后兼容当前行为(如果你以后遇到一些问题,你将简单地恢复 FetchType 并且数据库不会受到任何修改)并且你会如果您需要,将来仍然可以导航到其他实体。除此之外,这就是你用 POO 语言建模事物的方式。

如果您仍然对 FetchType.Lazy 选项有任何性能问题,您应该尝试解决它们(尽管我怀疑您的示例是否会获得任何性能改进)。

PS:可能会有人给出更好的答案,但我会尽量回答这个问题。

于 2013-10-23T16:12:13.173 回答