表之间有中间表的非hibernate映射

本文关键字:hibernate 映射 中间 之间 | 更新日期: 2023-09-27 18:07:02

我有以下代码:

public class Hotel
{
  public int ID
  {  
    get;set
  } 
  public IList<Photo> Photos
  {
    get;set;
  }
  //...other code
}
public class Photo
{
  public int ID
  {
     get;set;
  }
  //...other fields
}

在数据库中,我有以下表:

Photo: ID, Url, //.. other fields
HotelPhoto:ID, PhotoID, HotelID
Hotel:ID, Location, //..other fields

Hotel <--> HotelPhotoHotelPhoto <--> Photo的关系

我的问题是:我是否可以配置Hotel类和Hotel表之间的某种映射,以获得Photo的列表,而无需创建新类HotelPhoto ?(我想要一个照片列表,而不是一个可以从中获取照片的HotelPhoto列表)。

不知何故,我想从Hotel类访问Photo表,而不需要任何HotelPhoto类,因为我知道HotelPhoto表只包含Hotel和Photo表的id。

提前感谢,Tamash

表之间有中间表的非hibernate映射

您可以使用many-to-many -mapping,例如:

酒店映射文件,应该包含如下内容:

<set name="Photos" table="HotelPhoto">
  <key column="HotelId" />
  <many-to-many class="Photo" column="PhotoId"/>
</set>

对于照片映射文件,您可以使用如下命令:

<set name="Hotels" table="HotelPhoto">
  <key column="PhotoId" />
  <many-to-many class="Hotel" column="HotelId"/>
</set>

注意,映射没有经过测试,并且假设Photo有一个酒店列表(否则您的db-schema对我来说就没有意义了)。

您可以在这里找到文档。http://nhibernate.info/doc/nh/en/index.html collections-ofvalues