1
public class Store
{
public virtual prop1 { get; set;}
public virtual int RegionID { get; set;}
public virtual Region Region { get; set;
}

public class Region
{
  public virtual int RegionID { get; set;}
}

最後に、私のSQLは次のようになります

select * from store inner join region on store.regionid = region.regionid

上記の内部結合を達成するために以下を機能させるにはどうすればよいですか。

Session.QueryOver<Store>()
                .JoinQueryOver<Region>(s => s.Region)
4

1 に答える 1

0

内部結合を実現するには、NHibernate マッピングで Store エンティティと Region エンティティ間の関係をセットアップする必要があります。

QueryOver API を使用して結合するキーを指定することはできません。

クラスは次のようになります。

public class Region
{
  public virtual int RegionID { get; set;}
  public virtual IList<Store> Stores { get; set; }
}

public class Store
{
    public virtual int StoreId { get; set;}
    public virtual Region Region { get; set; }
}

マッピングは次のようになります。

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class xmlns="urn:nhibernate-mapping-2.2" name="YourNameSpace.Region, YourNameSpace" table="Region">
    <id name="RegionID">
      <column name="RegionID" />
      <generator class="identity" />
    </id>
    <bag cascade="all" inverse="true" name="Stores">
      <key>
        <column name="RegionID" />
      </key>
      <one-to-many class="YourNameSpace.Store, YourNameSpace" />
    </bag>
  </class>
</hibernate-mapping>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class xmlns="urn:nhibernate-mapping-2.2" name="YourNameSpace.Store, YourNameSpace" table="Store">
    <id name="StoreID">
      <column name="StoreID" />
      <generator class="identity" />
    </id>

    <many-to-one class="YourNameSpace.Region, YourNameSpace" name="Region">
      <column name="RegionId" />
    </many-to-one>
  </class>
</hibernate-mapping>
于 2012-09-24T23:38:21.913 に答える