我有以下映射,其中我试图使用左连接恢复与产品关联的0 - 1媒体ID(我讨厌包括我的尝试,因为它混淆了情况)
ICriteria productCriteria = Session.CreateCriteria(typeof(Product));
productCriteria
.CreateAlias("ProductCategories", "pc", JoinType.InnerJoin)
.CreateAlias("pc.ParentCategory", "category")
.CreateAlias("category.ParentCategory", "group")
.Add(Restrictions.Eq("group.Id", 333))
.SetProjection(
Projections.Distinct(
Projections.ProjectionList()
.Add(Projections.Alias(Projections.Property("Id"), "Id"))
.Add(Projections.Alias(Projections.Property("Title"), "Title"))
.Add(Projections.Alias(Projections.Property("Price"), "Price"))
.Add(Projections.Alias(Projections.Property("media.Id"), "SearchResultMediaId")) // I NEED THIS
)
)
.SetResultTransformer(Transformers.AliasToBean<Product>());
IList<Product> products = productCriteria
.SetFirstResult(0)
.SetMaxResults(10)
.List<Product>();
我需要使用Media.Id填充SearchResultMediaId的查询,我只想在左外连接中恢复第一个Media,因为这是产品和媒体之间的1对多关联
产品按以下方式映射到媒体
mapping.HasManyToMany<Media>(x => x.Medias)
.Table("ProductMedias")
.ParentKeyColumn("ProductId")
.ChildKeyColumn("MediaId")
.Cascade.AllDeleteOrphan()
.LazyLoad()
.AsBag();
任何帮助都会很棒。