非hibernate子查询-无法解析类型x的属性

本文关键字:类型 属性 hibernate 查询 | 更新日期: 2023-09-27 18:17:20

我需要一些帮助找出一个查询,应该基于一对多的关系过滤。我有一个表'Product'和'ProductType'。" Product "有很多" ProductType "。这些模型工作得很好,我只是不知道如何根据"ProductType"记录过滤"Product"记录。

在这个例子中,我想选择所有的'Product',其中Product。Name == " someename " &&产品。版本== "9.6"。我想过滤ProductType。Type == "someType"。下面的语句抛出异常:

无法解析property: ProductType of: my.namespace.ProductType

我使用的例子来自Ayende的博客:查询示例

 var product = _session.CreateCriteria<Product>()
                              .Add(Restrictions.Eq("Name", "somename"))
                              .Add(Restrictions.Eq("Version", "9.6"))
                              .Add(Subqueries.PropertyIn("Id",
                                                         DetachedCriteria.For<ProductType>()
                                                                         .SetProjection(Projections.Property("Product.Id"))
                                                                         .CreateCriteria("ProductType")
                                                                         .Add(Restrictions.Eq("Type", "someType"))
                                       )).List<Product>().SingleOrDefault();

我接近了吗?有人能帮帮我吗?谢谢!

编辑

这让我很接近。如果我删除第二个CreateCriteria,我将得到一个填充了Types的产品。只要我添加连接回来…我得到0个结果

 var products = _session.CreateCriteria("Product")
                                   .Add(Restrictions.Eq("Name", "somename"))
                                   .Add(Restrictions.Eq("Version", "9.6")) //This works
                                   .CreateCriteria("Types", "productTypes",   JoinType.LeftOuterJoin)
                                   .Add(Restrictions.Eq("Type", "typename")).List<Product>();
            return products.FirstOrDefault();

非hibernate子查询-无法解析类型x的属性

非常接近-您只需要告诉CreateCriteria如何获得ProductType。例如:

var product = _session.CreateCriteria<Product>()
    .Add(Restrictions.Eq("Name", "somename"))
    .Add(Restrictions.Eq("Version", "9.6"))
    .Add(Subqueries.PropertyIn("Id",
         DetachedCriteria.For<ProductType>()
        .SetProjection(Projections.Property("Product.Id"))
        .CreateCriteria("Product.ProductType", JoinType.InnerJoin)
        .Add(Restrictions.Eq("Type", "someType"))
     ))
     .List<Product>()
     .SingleOrDefault();