/// <summary>
        /// Get collection persisters by the given query spaces.
        /// </summary>
        /// <param name="factory">The session factory.</param>
        /// <param name="spaces">The query spaces.</param>
        /// <returns>Unique list of collection persisters, if <paramref name="spaces"/> is <c>null</c> or empty then all persisters are returned.</returns>
        public static ISet <ICollectionPersister> GetCollectionPersisters(this ISessionFactoryImplementor factory, ISet <string> spaces)
        {
            if (factory is SessionFactoryImpl sfi)
            {
                return(sfi.GetCollectionPersisters(spaces));
            }

            ISet <ICollectionPersister> collectionPersisters = new HashSet <ICollectionPersister>();

            foreach (var roleName in factory.GetAllCollectionMetadata().Keys)
            {
                var collectionPersister = factory.GetCollectionPersister(roleName);
                if (spaces == null || spaces.Count == 0 || collectionPersister.CollectionSpaces.Any(x => spaces.Contains(x)))
                {
                    collectionPersisters.Add(collectionPersister);
                }
            }

            return(collectionPersisters);
        }