代码之家  ›  专栏  ›  技术社区  ›  Alexis Abril

是否按自引用父级添加筛选条件?

  •  0
  • Alexis Abril  · 技术社区  · 14 年前

    public class Folder
    {
        public IList<Folder> ParentFolders{get;set;}
    }
    

    我希望创建一个查询来提取根文件夹( 包含ParentFolders的ie文件夹。计数()==0 ). 自引用是通过查找表完成的,因此实际上无法从类访问ParentFolderID(仅显示在映射中)。

    public IList<Folder> GetRootFolders()
    {
        return session.CreateCriteria<Folder>()
            .outofideas()
            .List<Folder>();
    }
    

    2 回复  |  直到 14 年前
        1
  •  0
  •   tolism7    14 年前

    如果映射具有以下内容:

    <bag name="ParentFolders" table="FolderFolder" lazy="true">
        <key column="FolderID"/>
        <many-to-many class="Folder" column="ParentFolderID"/>
    </bag>
    

    var folders = Session.CreateCriteria<Folder>("folder")
        .Add(Restrictions.IsEmpty("ParentFolders")).List<Folder>();
    

    SELECT *
    FROM Folder folder 
    WHERE not exists (select 1 from FolderFolder where folder.FolderID=FolderID)
    

    我相信这会起作用。

        2
  •  0
  •   EMP    14 年前

    我一直都能找到NHibernate的 Criteria 很难相处(也就是说,甚至 更多 比NHibernate的其余部分更难。)请尝试创建HQL查询。如果看不到映射文件,我无法为您编写查询,但它可能类似于:

    session.CreateQuery("FROM Folder f WHERE COUNT(f.ParentFolders) = 0")
    

    然后