我的数据库中有2个表:
每个BlogEntry
都有1个或多个Category
与之关联。
如果我想通过其ID获取BlogEntry
,我还希望获得其Category
信息。
也许这个例子没有说明这个有意义的场景,但是我只想加载Category
ID和Name,而不是类别数据库中的所有其他列。
nHibernate会加载每个实体的所有列/属性吗?
答案 0 :(得分:1)
我会通过将其映射为BlogEntry和Category之间的一对多关联来处理此问题,以便BlogEntry具有Category的集合。我会设置它以使类别集合延迟加载。我不在乎我正在加载比我将要显示的列更多的列,因为我正在使用业务对象并通过主键或外键进行选择。这是NHibernate担心的问题,尽管我会在使用SQL事件探查器或NHProf进行开发时检查它。
NHibernate将使用BlogEntry中的外键选择Category记录来加载集合。几乎在所有情况下,只返回您将要显示的字段,不会有性能提升。检索仅具有基于显示要求填充的所需属性的业务对象不是一种良好的面向对象的实践。
答案 1 :(得分:0)
这将取决于您如何映射它。显然,位代码检测只允许检索部分表,但很少需要它。
也许解释为什么你只想要类别的id ......
如果您定义了hibernate映射,而不是将类别映射到类别对象的实体只是将其作为整数。当我不关心能够使用原始查询获取附件时,这就是我处理映射的方式。
答案 2 :(得分:0)
您可能需要查看预测。我们实际上正在使用AliasToBean转换器来让NHibernate将我们的投影直接转换为特定于屏幕的DTO。