以下のコード サンプルは、すべてのアクティブなレコードを取得するためのものです。
session.CreateCriteria<VesselMasterData>()
.CreateAlias("BasicInfo", "bsInfo")
.CreateAlias("DimentionInfo", "diInfo")
.Add(Restrictions.Eq("IsActive", 1))
.Add(Restrictions.Eq("diInfo.IsActive", 1))
.Add(Restrictions.Eq("MasterDataID", masterDataID))
.Add(Restrictions.Eq("bsInfo.IsActive", 1))
.List<VesselMasterData>()
親テーブル VesselMasterData と子テーブルは BasicInfo と DimentionInfo です。クエリに基づく期待値は、BasicInfo および DimentionInfo のすべてのアクティブなレコードである必要があります。
しかし、出力では、BasicInfo と DimentionInfo からすべてのレコードを取得します。何が問題になる可能性がありますか。
これは VesselMasterData テーブルのマッピングです。
public class VesselMasterDataMap : ClassMap<VesselMasterData>
{
public VesselMasterDataMap()
{
Table("VPD_VESSEL_MASTER_DATA");
Schema("APPLN1");
Id(x => x.MasterDataID).Column("MASTER_DATA_ID").GeneratedBy.Sequence("VPD_VESSEL_MASTER_DATA_SEQ");
Map(x => x.VesselCode).Column("VESSEL_CODE");
Map(x => x.IsActive).Column("IS_ACTIVE");
HasMany<VesselBasicInfo>(prop => prop.BasicInfo)
.KeyColumns.Add("MASTER_DATA_ID").Cascade.SaveUpdate().Inverse().Not.LazyLoad();
HasMany<VesselDimension>(prop => prop.DimentionInfo)
.KeyColumns.Add("MASTER_DATA_ID").Cascade.SaveUpdate().Inverse().Not.LazyLoad();
}
}