我有一个具有多个多对一关系的实体,我发现我可以在一个查询中急切地获取它们,如下所示:
public Accommodation GetEager(int id)
{
IList<Accommodation> query = NHibernateSession.CurrentFor(NHibernateSession.DefaultFactoryKey)
.CreateQuery(@"
select a from Accommodation as a
left join fetch a.AccommodationType
left join fetch a.AccommodationUnitType
left join fetch a.CollectionType
where a.Id = :id
")
.SetProperties(new {id})
.SetCacheable(true)
.List<Accommodation>();
return query.SingleOrDefault();
}
但是,关系并不总是存在,我已经定义了这样的映射:
mapping.References(x => x.AccommodationUnitType).NotFound.Ignore();
我发现当关系不存在时,NHibernate 会生成第二个 SQL 查询来查找它,大概是因为它发现该属性为空。
我的第一个问题是,如何防止第二个 sql 查询?
我的第二个问题是,有没有一种更简单的方法可以将这个提取到一个查询中?人们希望在一个查询中获取所有内容,而不是为每个多对一关系单独查询(这似乎是默认行为),这似乎是非常基本的行为。