如何了解HQL NHibernate中的类和映射类

本文关键字:映射 NHibernate HQL 何了解 了解 | 更新日期: 2023-09-27 18:12:44

我的想法是,我想知道实体和映射类从HQL查询。例如,如果我有。cs表示实体UserMap.cs for Mapping User.cs

where I query with HQL like this>
var hql = session.CreateQuery("FROM User");

我怎么知道这个查询运行针对User.cs和UserMap.cs映射。这是因为我想阻止用户查询某些实体。

如何了解HQL NHibernate中的类和映射类

在深入研究NHibernate源代码并获得想法后,我自己修复,但不知道为什么没有其他人像我以前一样有同样的问题。

    [Test]
    public void Test()
    {
        var plan = CreateQueryPlan("FROM User u JOIN u.Country c", false);
        //Check(plan.ReturnMetadata, false, true);
        foreach(var type in plan.ReturnMetadata.ReturnTypes)
        {
            Log.DebugFormat("name: {0}", type.Name);
        }
    }
    public IQueryPlan CreateQueryPlan(string hql, bool scalar)
    {
        var sessionFactory = (ISessionFactoryImplementor)SessionFactory.GetNHSessionFactory();
        var plan = sessionFactory.QueryPlanCache.GetHQLQueryPlan(hql, false,
              new CollectionHelper.EmptyMapClass<string, IFilter>());
        return plan;
    }