NHibernate3を使用して休閑マッピングを宣言しました。
FluentNHibernateを使用
public class ActivityMap : ClassMap<Activity> {
public ActivityMap() {
this.Table("Activity");
this.Cache.ReadWrite();
this.Version(x => x.ObjectVersion);
this.Id(x => x.Id).GeneratedBy.Assigned();
// snipp
this.HasOne(x => x.AppointmentRecurrence).Cascade.Delete();
}
}
public class AppointmentRecurrenceMap : ClassMap<AppointmentRecurrence> {
public AppointmentRecurrenceMap() {
this.Table("AppointmentRecurrence");
this.Cache.ReadWrite();
this.Version(x => x.ObjectVersion);
this.Id(x => x.Id).GeneratedBy.Foreign("Activity");
// snipp
this.HasOne(x => x.Activity).Constrained();
}
}
これは休眠中のhbm-mappingを生成しています:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class xmlns="urn:nhibernate-mapping-2.2" lazy="false" name="Prayon.Entities.Activity, Prayon.Entities, Version=1.0.0.867, Culture=neutral, PublicKeyToken=null" table="Activity">
<cache usage="read-write" />
<id name="Id" type="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Id" />
<generator class="assigned" />
</id>
<!-- snipp -->
<one-to-one cascade="delete" class="Prayon.Entities.AppointmentRecurrence, Prayon.Entities, Version=1.0.0.867, Culture=neutral, PublicKeyToken=null" foreign-key="FK_Activity_AppointmentRecurrence" name="AppointmentRecurrence" />
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class xmlns="urn:nhibernate-mapping-2.2" lazy="false" name="Prayon.Entities.AppointmentRecurrence, Prayon.Entities, Version=1.0.0.867, Culture=neutral, PublicKeyToken=null" table="AppointmentRecurrence">
<cache usage="read-write" />
<id name="Id" type="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<column name="Id" />
<generator class="foreign">
<param name="property">Activity</param>
</generator>
</id>
<!-- snipp -->
<one-to-one class="Prayon.Entities.Activity, Prayon.Entities, Version=1.0.0.867, Culture=neutral, PublicKeyToken=null" constrained="true" foreign-key="FK_AppointmentRecurrence_Activity" name="Activity" />
</class>
</hibernate-mapping>
ここで、アクティビティを(cachable-selectを使用して)選択すると、NHibernate-Profilerで、NHibernateが各アクティビティを第2レベルのキャッシュから正しく取得していることがわかりますが、各アクティビティに対してAppointmentReccurrenceへの選択が行われます。キャッシュからもAppointmentReccurrenceを取得するにはどうすればよいですか?1対1の関係にキャッシュ属性を設定しようとしましたが、サポートされていないようです。