0

以下のコード サンプルは、すべてのアクティブなレコードを取得するためのものです。

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();
        }
   }
4

2 に答える 2

0

Restrictions.And結合条件を次のように追加するために使用します。

       session.CreateCriteria<VesselMasterData>()
              .CreateAlias("BasicInfo", "bsInfo")
              .CreateAlias("DimentionInfo", "diInfo")
              .Add(Restrictions.And(
                     Restrictions.Eq("IsActive", 1),
                     Restrictions.And(
                         Restrictions.Eq("diInfo.IsActive", 1),
                         Restrictions.And(
                              Restrictions.Eq("MasterDataID", masterDataID),
                              Restrictions.Eq("bsInfo.IsActive", 1)
                         )
                     )
                  )
               ).List<VesselMasterData>()
于 2012-11-15T03:31:52.010 に答える
0

これは期待どおりに機能しますが、同等の CreateCriteria コードを取得することを楽しみにしています。

    session.CreateQuery(string.Format("from VesselMasterData vm inner join fetch 
vm.AcquisitionInfo acq inner join fetch vm.BasicInfo bi inner join fetch 
vm.DimentionInfo di inner join fetch vm.SaleInfo si 
where vm.MasterDataID={0}  and bi.IsActive = 1 and di.IsActive = 1 ", masterDataID)).Future<VesselMasterData>();
于 2012-11-15T04:08:14.700 に答える