private void BindManyToManySubelements(Mapping.Collection collection, XmlNode manyToManyNode) { // Bind the where XmlAttribute where = manyToManyNode.Attributes["where"]; string whereCondition = where == null ? null : where.Value; collection.ManyToManyWhere = whereCondition; // Bind the order-by XmlAttribute order = manyToManyNode.Attributes["order-by"]; string orderFragment = order == null ? null : order.Value; collection.ManyToManyOrdering = orderFragment; // Bind the filters if ((manyToManyNode.SelectSingleNode(HbmConstants.nsFilter, namespaceManager) != null || whereCondition != null) && collection.FetchMode == FetchMode.Join && collection.Element.FetchMode != FetchMode.Join) throw new MappingException( "many-to-many defining filter or where without join fetching " + "not valid within collection using join fetching [" + collection.Role + "]" ); foreach (XmlNode filterElement in manyToManyNode.SelectNodes(HbmConstants.nsFilter, namespaceManager)) { string name = XmlHelper.GetAttributeValue(filterElement, "name"); string condition = filterElement.InnerText.Trim(); if (StringHelper.IsEmpty(condition)) condition = XmlHelper.GetAttributeValue(filterElement, "condition"); if (StringHelper.IsEmpty(condition)) condition = mappings.GetFilterDefinition(name).DefaultFilterCondition; if (condition == null) throw new MappingException("no filter condition found for filter: " + name); log.Debug( "Applying many-to-many filter [" + name + "] as [" + condition + "] to role [" + collection.Role + "]" ); collection.AddManyToManyFilter(name, condition); } }