父母不同的NHibernate标准可负担所有孩子?

约翰·S

我有一个亲子关系,我只想返回一位父母并加载所有孩子。我正在使用条件,因为它是一个动态查询。

var messageQueueId = this.GetPropertyName<MessageQueue>(x => x.Id);

var query = _sessionManager.Session.CreateCriteria<MessageQueue>(QUEUE_ALIAS);

query.SetFirstResult(_pageOffset);
query.SetMaxResults(_pageSize);
query.Add(Restrictions.In(messageQueueId, _messageQueueIds));

query.List<MessageQueue>();

这将返回父级(MessageQueue),但不会返回其子级(SearchMatches)。

当我尝试这样做时:

var query = _sessionManager.Session
    .CreateCriteria<MessageQueue>(QUEUE_ALIAS)
    .CreateAlias(this.GetPropertyName<MessageQueue>(x => x.SearchMatches)
                , MATCH_ALIAS, JoinType.LeftOuterJoin);

然后,我让孩子们满载,但我也得到了双亲。我了解为什么会这样。但是,我不明白如何获得第一种情况以自动加载SearchMatches?

这是我的实体:

public class MessageQueue : EntityBase
{
    ...
    public virtual IList<SearchMatch> SearchMatches { get; set; }
    ...
}

public class SearchMatch : EntityBase
{
    ...
    public virtual MessageQueue MessageQueue { get; set; }
    ...
}

流利的NHibernate设置为DefaultCascade.All()我没有这些对象的其他替代。

我试图使用Inverse()Not.LazyLoad()关闭MessageQueue替代。还尝试从CreateAlias进行EagerLoad。但是我仍然没有得到我需要的东西。

拉迪姆·科勒

我建议使用该batch-size=""设置。最终结果将是
1)由我们(query.List<MessageQueue>();发出的一个查询
2)NHibernate然后将使用一个(或仅几个)查询来为每个返回的查询加载集合MessageQueue

19.1.5。使用批量提取

NHibernate可以有效地使用批处理获取,也就是说,如果访问了一个代理(或集合),NHibernate可以加载多个未初始化的代理。批处理获取是惰性选择获取策略的优化。有两种方法可以调整批处理获取:类和收集级别。

批量获取类/实体更容易理解。假设您在运行时遇到以下情况:在ISession中加载了25个Cat实例,每个Cat都有一个对其所有者Person的引用。Person类与代理lazy =“ true”映射。如果您现在遍历所有cat并在每个cat上调用cat.Owner,则NHibernate将默认执行25条SELECT语句,以检索代理的所有者。您可以通过在Person映射中指定一个批处理大小来调整此行为:

<class name="Person" batch-size="10">...</class>

流利的替代方法是(集合级和班级级)

.BatchSize(25)

还要检查:

注意:最后,作为批处理大小传递的数字(例如25)似乎用作其一半-12。因此,如果您使用25进行分页,请尝试使用 SetBatchSize(50)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

让所有父母为孩子

来自分类Dev

针对父母的所有孩子

来自分类Dev

让所有父母共同拥有孩子

来自分类Dev

选择匹配的孩子父母的所有孩子表ID

来自分类Dev

为所有父母找到所有孩子

来自分类Dev

选择一个父母和所有给定父母或孩子ID的孩子

来自分类Dev

选择一个父母和所有给定父母或孩子ID的孩子

来自分类Dev

查询所有孩子都有一对/重复的父母

来自分类Dev

选择所有孩子都有状态 x 的父母

来自分类Dev

Oracle查询列出孩子之前的所有父母

来自分类Dev

ActiveRecord:如何找到所有孩子都符合条件的父母?

来自分类Dev

当所有孩子共享相同的值时查找父母ID

来自分类Dev

递归地从单亲父母那里获得所有孩子

来自分类Dev

内在加入所有孩子前(n)个父母

来自分类Dev

突出显示列表中的父母,但不是所有孩子

来自分类Dev

从两个父母 CSS 获取所有特定的孩子

来自分类Dev

加载合作伙伴、父母和所有孩子的发票

来自分类Dev

Realm - 从孩子的角度获取所有孩子的所有父母的列表

来自分类Dev

获取所有没有孩子的父母或者如果有孩子,获取最新的孩子

来自分类Dev

如何在每个孩子坐骑上而不是在所有孩子坐骑后更新父母的状态?

来自分类Dev

LINQ-从所有父母那里获得所有孩子的记录

来自分类Dev

JPA没有孩子的父母

来自分类Dev

Linq父母有多个孩子

来自分类Dev

孩子没有伸向父母

来自分类Dev

在Laravel育有孩子的父母

来自分类Dev

RxJava zip,可处理父母双方的所有更改

来自分类Dev

RxJava zip,可处理父母双方的所有更改

来自分类Dev

休眠标准。选择所有不同的实体

来自分类Dev

ActiveRecord-列出所有父母没有一个特定的孩子

Related 相关文章

热门标签

归档