【问题标题】:NHibernate query baseclass without left joins to derived classesNHibernate 查询基类,没有派生类的左连接
【发布时间】:2009-11-03 11:46:43
【问题描述】:

我有两个类,其中一个继承自另一个。我试图使用 NHibernate 来映射这些类,以便我可以尽可能高效地查询这两个类。 基类不是抽象的,需要能够独立查询。基类看起来像这样。

public class Cat
{
    public int Id { get; set; }
    public string Name { get; set; }
}

派生类看起来像这样:

public class CustomerCat : Cat
{
    public int CustomerId { get; set; }
}

派生简单扩展了基础并为其添加了更多属性。我的映射文件是这样的

<?xml version="1.0" encoding="utf-8" ?>  
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"  
                   assembly="Foo"  
                   namespace="Foo">  
  <class name="Cat" table="Cat">  
    <id name="Id" column="CatId" type="Int32" unsaved-value="0">  
      <generator class="native" />  
    </id>  
    <property name="Name" column="CatName" type="string" />  
    <joined-subclass name="CustomerCat" table="CustomerCat">  
      <key column="CatId" />  
      <property name="CustomerId " column="CustomerId" />  
    </joined-subclass>  
  </class>  
</hibernate-mapping>

我遇到的问题是,如果我通过以下方式查询 Cats:

IList<Cat> cats = session.CreateCriteria<Cat>().List<Cat>();

生成的 sql 将通过joined-subclass 表离开join。我可以在查询中不引用任何派生类表的情况下查询我的基类吗?

【问题讨论】:

    标签: c# nhibernate nhibernate-mapping


    【解决方案1】:

    我认为,为了以您希望的方式工作(即,并不总是进行左连接),您必须创建一个抽象基类。问题是所有 CustomerCat 都是 Cats,因此它必须加入该表才能获取所有 Cats(即 Cats 和 CustomerCats)。

    如果您决定创建一个抽象基类,请参阅here 了解不同选项的概述以及它们产生的 SQL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多