Named SQL queries - NHibernate
От: Geny Украина  
Дата: 11.06.09 13:58
Оценка:
Помогите, мыслей больше просто нет...
Есть 2 класса

public class DovKlient
    {
        private ISet keyPodatDeclarAddFive;
        public virtual string Subjid { get; set; }        
        public virtual string Codenalog { get; set; }
        public virtual string Subjname { get; set; }
        public virtual string SubjAddr { get; set; }
        public virtual string TaxPayerCode { get; set; }
        public virtual string Okpo { get; set; }
        public virtual int Mfo { get; set; }
        public virtual byte Rezident { get; set; }
        public virtual ISet KeyPodatDeclarAddFive
        {
            get
            {
                if (keyPodatDeclarAddFive == null)
                    return keyPodatDeclarAddFive = new HashedSet();
                return keyPodatDeclarAddFive;
            }
            set { keyPodatDeclarAddFive = value; }
        }
    }

и

public class PDAFId
    {
#region Свойства
        private int year;
        private int month;
        private int npp;
        private int nsection;
        private int nadd;

        public virtual int Year
        {
            get { return year; }
            set { year = value; }
        }
        public virtual int Month
        {
            get { return month; }
            set { month = value; }
        }
        public virtual int Npp
        {
            get { return npp; }
            set { npp = value; }
        }
        public virtual int Nsection
        {
            get { return nsection; }
            set { nsection = value; }
        }
        public virtual int Nadd
        {
            get { return nadd; }
            set { nadd = value; }
        }
#endregion

        public PDAFId()
        {
        }

        public PDAFId(int year, int month, int npp, int nsection, int nadd)
        {
            this.year = year;
            this.month = month;
            this.npp = npp;
            this.nsection = nsection;
            this.nadd = nadd;
        }

        public override int GetHashCode()
        {
            return Npp.GetHashCode();
        }

        public override bool Equals(object obj)
        {
            var otherId = obj as PDAFId;
            if (otherId == null)
            {
                return false;
            }
            if (otherId.Year == Year && 
                otherId.Month == Month && 
                otherId.Npp == Npp && 
                otherId.Nsection == Nsection && 
                otherId.Nadd == Nadd)
            {
                return true;
            }
            return false;
        }
    }
    public class PodatDeclarAddFive
    {
#region Свойства
        private PDAFId id;

        public virtual PDAFId Id
        {
            get { return id; }
            set { id = value; }
        }
        public virtual string Subjid { get; set; }
        public virtual string Codenalog { get; set; }
        public virtual int Year { get; set; }
        public virtual int Month { get; set; }
        public virtual int Actual { get; set; }
#endregion

        public virtual DovKlient KeyDovKlient { get; set; }

        public PodatDeclarAddFive ()
        {
        }

        public PodatDeclarAddFive (PDAFId id)
        {
            if (id == null) throw new System.ArgumentNullException("id");
            this.id = id;
        }
    }


к ним соответственно меппинги


 <class name ="PodatDeclarAddFive" table="OPLATA.PODAT_DECLAR_ADD_FIVE" where ="IPN is not null">
    <composite-id name ="Id" class="ITN.DataLayer.PDAFId">
      <key-property name ="Year" column ="YEAR"/>
      <key-property name ="Month" column="MONTH"/>
      <key-property name ="Npp" column="N_PP"/>
      <key-property name ="Nsection" column="N_SECTION"/>
      <key-property name ="Nadd" column="N_ADD"/>
    </composite-id>
    <property name="Subjid" column="SUBJID" update="false" insert="false" not-null="false" unique="false"/>
    <property name="Codenalog" column="IPN" update="false" insert="false" not-null="false" unique="false"/>
    <property name="Year" column="YEAR_R" update="false" insert="false" not-null="false" unique="false"/>
    <property name="Month" column="MONTH_R" update="false" insert="false" not-null="false" unique="false"/>
    <property name="Actual" column="actual" update="false" insert="false" not-null="false" unique="false"/>
    <many-to-one name="KeyDovKlient" column="subjid" class="DovKlient"></many-to-one>
  </class>
  
  <class name="DovKlient" table="info.dov_klient" where="okpo is not null and codenalog is not null">
    <id name="Subjid" column="subjid">
      <generator class="native"/>      
    </id>
    <property name="Codenalog" column="codenalog" update="false" insert="false" not-null="false" unique="false"/>
    <property name="Subjname" column="subjname" update="false" insert="false" not-null="false" unique="false"/>
    <property name="SubjAddr" column="subjaddr" update="false" insert="false" not-null="false" unique="false"/>
    <property name="TaxPayerCode" column="TaxPayerCode" update="false" insert="false" not-null="false" unique="false"/>
    <property name="Okpo" column="okpo" update="false" insert="false" not-null="false" unique="false"/>
    <property name="Mfo" column="mfo" update="false" insert="false" not-null="false" unique="false"/>
    <property name="Rezident" column="rezident" update="false" insert="false" not-null="false" unique="false"/>
    <set name ="KeyPodatDeclarAddFive" inverse ="true">
      <key column ="subjid"></key>
      <one-to-many class="PodatDeclarAddFive"/>
    </set>
  </class>


делаю Named SQL queries

<sql-query name ="querypdaf">
    <return alias ="pdaf" class ="PodatDeclarAddFive">
      <return-property name="Year" column="Year"></return-property>
      <return-property name="Month" column="Month"></return-property>
      <return-property name="Subjid" column="Subjid"></return-property>
      <return-property name="Codenalog" column="Codenalog"></return-property>
    </return>
    <return-join alias="dk" property ="pdaf.KeyDovKlient">
      <return-property name="Subjname" column="Subjname"></return-property>
      <return-property name="SubjAddr" column="Subjaddr"></return-property>
      <return-property name="TaxPayerCode" column="TaxPayerCode"></return-property>
      <return-property name="Okpo" column="Okpo"></return-property>
    </return-join>
    select
    pdaf.YEAR AS Year,
    pdaf.MONTH AS Month,
    pdaf.SUBJID AS Subjid,
    pdaf.IPN AS Codenalog,
    dk.SUBJNAME AS Subjname,
    dk.SUBJADDR AS Subjaddr,
    dk.TAXPAYERCODE AS TaxPayerCode,
    dk.OKPO AS Okpo
    from
    OPLATA.PODAT_DECLAR_ADD_FIVE as pdaf,
    INFO.DOV_KLIENT as dk
    where
    pdaf.MONTH = 5
    and pdaf.IPN is not null
    and pdaf.SUBJID = dk.SUBJID
  </sql-query>


и при выполнении пишет

DEBUG [2009-06-11 16:53:29,292] — could not execute query
[ select
pdaf.YEAR AS Year,
pdaf.MONTH AS Month,
pdaf.SUBJID AS Subjid,
pdaf.IPN AS Codenalog,
dk.SUBJNAME AS Subjname,
dk.SUBJADDR AS Subjaddr,
dk.TAXPAYERCODE AS TaxPayerCode,
dk.OKPO AS Okpo
from
OPLATA.PODAT_DECLAR_ADD_FIVE as pdaf,
INFO.DOV_KLIENT as dk
where
pdaf.MONTH = 5
and pdaf.IPN is not null
and pdaf.SUBJID = dk.SUBJID ]

NHibernate.Util.ADOExceptionReporter.LogExceptions(:0)
System.IndexOutOfRangeException: YEAR0_0_
в System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName)
в System.Data.Odbc.OdbcDataReader.GetOrdinal(String value)
в NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name)
в NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String[] names, ISessionImplementor session, Object owner)
в NHibernate.Type.AbstractType.Hydrate(IDataReader rs, String[] names, ISessionImplementor session, Object owner)
в NHibernate.Type.ComponentType.Hydrate(IDataReader rs, String[] names, ISessionImplementor session, Object owner)
в NHibernate.Type.ComponentType.NullSafeGet(IDataReader rs, String[] names, ISessionImplementor session, Object owner)
в NHibernate.Loader.Loader.GetKeyFromResultSet(Int32 i, ILoadable persister, Object id, IDataReader rs, ISessionImplementor session)
в NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies)
в NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
в NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
в NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)
WARN [2009-06-11 16:53:29,307] — System.IndexOutOfRangeException: YEAR0_0_
в System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName)
в System.Data.Odbc.OdbcDataReader.GetOrdinal(String value)
в NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String name)
в NHibernate.Type.NullableType.NullSafeGet(IDataReader rs, String[] names, ISessionImplementor session, Object owner)
в NHibernate.Type.AbstractType.Hydrate(IDataReader rs, String[] names, ISessionImplementor session, Object owner)
в NHibernate.Type.ComponentType.Hydrate(IDataReader rs, String[] names, ISessionImplementor session, Object owner)
в NHibernate.Type.ComponentType.NullSafeGet(IDataReader rs, String[] names, ISessionImplementor session, Object owner)
в NHibernate.Loader.Loader.GetKeyFromResultSet(Int32 i, ILoadable persister, Object id, IDataReader rs, ISessionImplementor session)
в NHibernate.Loader.Loader.GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydratedObjects, EntityKey[] keys, Boolean returnProxies)
в NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
в NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
в NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)
NHibernate.Util.ADOExceptionReporter.LogExceptions(:0)
ERROR [2009-06-11 16:53:29,307] — YEAR0_0_
NHibernate.Util.ADOExceptionReporter.LogExceptions(:0)

чуть выше видно, что запрос возвращает 0 записей..,

DEBUG [2009-06-11 16:53:29,260] — select
pdaf.YEAR AS Year,
pdaf.MONTH AS Month,
pdaf.SUBJID AS Subjid,
pdaf.IPN AS Codenalog,
dk.SUBJNAME AS Subjname,
dk.SUBJADDR AS Subjaddr,
dk.TAXPAYERCODE AS TaxPayerCode,
dk.OKPO AS Okpo
from
OPLATA.PODAT_DECLAR_ADD_FIVE as pdaf,
INFO.DOV_KLIENT as dk
where
pdaf.MONTH = 5
and pdaf.IPN is not null
and pdaf.SUBJID = dk.SUBJID
NHibernate.AdoNet.AbstractBatcher.LogCommand(:0)
DEBUG [2009-06-11 16:53:29,260] — Enlist Command
NHibernate.Transaction.AdoTransaction.Enlist(:0)
DEBUG [2009-06-11 16:53:29,276] — Opened IDataReader, open IDataReaders: 1
NHibernate.AdoNet.AbstractBatcher.LogOpenReader(:0)
DEBUG [2009-06-11 16:53:29,276] — processing result set
NHibernate.Loader.Loader.DoQuery(:0)
DEBUG [2009-06-11 16:53:29,276] — result set row: 0 (!!!!!!!!!)
NHibernate.Loader.Loader.DoQuery(:0)
DEBUG [2009-06-11 16:53:29,292] — Closed IDataReader, open IDataReaders :0
NHibernate.AdoNet.AbstractBatcher.LogCloseReader(:0)
DEBUG [2009-06-11 16:53:29,292] — Closed IDbCommand, open IDbCommands: 0
NHibernate.AdoNet.AbstractBatcher.LogClosePreparedCommand(:0)

но если выполнять в интерактиве,то он возвращает много записей, а не 0
вот в чем вопрос.., почему запрос возвращает 0 записей...???
Заранее спасибо...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.