Thanks Fabio. I understand your point.

On Oct 17, 5:36 pm, Fabio Maulo <[email protected]> wrote:
> No, I'm talking about "I have to create a new project"; the existing
> DB in not part of the old application?
> If there is a sense because you are re-implementing an existing
> application why re-implement the DB is not an option?
> Is the DB a granitic piece of technology of the past century?
>
> --
> Fabio Maulo
>
> El 17/10/2010, a las 12:18, DavidOs <[email protected]> escribió:
>
>
>
> > Hi Fabio,
>
> > Thanks for your advice.
> > You are talking about a situation when I have to create a new project
> > and the DB doesn't exist. but in my case the DB exist already for long
> > time and I can't change it so the question is if NH can do something
> > here ?
>
> > David .
>
> > On Oct 17, 2:08 pm, Fabio Maulo <[email protected]> wrote:
> >> As advise, not as solution:
> >> - switch your mind! Stop to talk about "Table" and begin thinking in
> >> entities, assotiations, aggregations, inheritance and so on; think
> >> about object and then, perhaps, about how represent it in tables.
> >> - don't use business meaning properties as PK
> >> - don't use PK composed by more than one field
>
> >> --
> >> Fabio Maulo
>
> >> El 17/10/2010, a las 07:54, DavidOs <[email protected]> escribió:
>
> >>> Hi,
>
> >>> I have a table that represent groups of codes like countries,cities
> >>> etc.
> >>> I need just the list of countries from this table.
> >>> To define this table in the hbm.xml file I use the composite-id like
> >>> this :
>
> >>> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
> >>> assembly="StudentsNH" namespace="StudentsNH.Domain">
>
> >>>  <class name="Country" table="mz_kodim">
> >>>    <composite-id >
> >>>      <key-property name="countryGroupCode" column="mispar_tab" />
> >>>      <key-property name="countryCode" column="kod" />
> >>>      <key-property name="LangCode" column="kod_safa" />
> >>>    </composite-id>
> >>>    <property name="countryDesc" column="teur" />
> >>>  </class>
>
> >>> </hibernate-mapping>
>
> >>> This is the country class :
>
> >>> public class Country
> >>>    {
> >>>        public virtual int countryGroupCode { get; set; }
> >>>        public virtual int countryCode{get;set;}
> >>>        public virtual int LangCode { get; set; }
> >>>        public virtual string countryDesc {get; set;}
>
> >>>        public override bool Equals(object obj)
> >>>        {
> >>>            return true;
> >>>        }
>
> >>>        public override int GetHashCode()
> >>>        {
> >>>            return this.GetHashCode();
> >>>        }
> >>>    }
>
> >>> Here I get the country name :
>
> >>> public string SelectCountryByID(int n)
> >>>        {
> >>>            try
> >>>            {
> >>>                using (ISession session =
> >>> NHibernateHelper.OpenSession())
> >>>                {
> >>>                    var s = session.Get<Country>(new Country()
> >>>                                                {
> >>>                                                    countryGroupCode =
> >>> 16,
> >>>                                                    countryCode = n,
> >>>                                                    LangCode = 1
> >>>                                                });
>
> >>>                    return ((Country)s).countryDesc;
> >>>                }
>
> >>>            }
> >>>            catch (Exception ex)
> >>>            {
> >>>                return null;
> >>>            }
> >>>        }
>
> >>> This works fine.
>
> >>> Now is my problem.
>
> >>> I have a student class which contain all its details and his birth
> >>> country.
> >>> This students table in the database contain just the code value of the
> >>> country.
> >>> In the class I want to represent a country entity rather than the code
> >>> value.
> >>> Here the student class I called "Demographic" :
>
> >>> public class Demographic
> >>>    {
> >>>        public virtual string idNumber { get; set; }
> >>>        public virtual string hebFirstName { get; set; }
> >>>        public virtual string hebLastName { get; set; }
> >>>        public virtual string engFirstName { get; set; }
> >>>        public virtual string engLastName { get; set; }
> >>>        public virtual DateTime dateBirth { get; set; }
> >>>        public virtual Country birthCountry { get; set; }
> >>>        public virtual string telNumber { get; set; }
> >>>        public virtual string cellNumber { get; set; }
> >>>        public virtual string streetName { get; set; }
> >>>        public virtual int streetNum { get; set; }
> >>>        public virtual int mikudNum { get; set; }
> >>>        public virtual string email { get; set; }
>
> >>>    }
>
> >>> Now, I don't know what to write in the hbm.xml file so I tried this :
>
> >>> hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
> >>> assembly="StudentsNH" namespace="StudentsNH.Domain">
> >>>  <class name="Demographic" table="Olim1">
> >>>    <id name="idNumber" column="mispar_zehut" >
> >>>      <generator class="assigned" />
> >>>    </id>
> >>>    <property name="hebFirstName"  column="shem_prati"/>
> >>>    <property name="hebLastName"  column="shem_mishpaha"/>
> >>>    <property name="engFirstName" column="shem_prati_l"/>
> >>>    <property name="engLastName" column="shem_mishpaha_l" />
> >>>    <property name="dateBirth" column="tarich_leyda" />
> >>>    <many-to-one name="birthCountry"  column="kod" fetch="join"
> >>> class="Country"  />
> >>>    <property name="telNumber" column="telephone" />
> >>>    <property name="cellNumber" column="telephone_nayad"/>
> >>>    <property name="streetName" column="rehov_ktovet" />
> >>>    <property name="streetNum" column="mispar_ktovet" />
> >>>    <property name="mikudNum" column="mikud_ktovet" />
> >>>    <property name="email" column="email" />
> >>>  </class>
>
> >>> </hibernate-mapping>
>
> >>> I try this to get few students instances :
>
> >>> public Demographic SelectStudent(string userName, string pass)
> >>>        {
> >>>            try
> >>>            {
> >>>                using (ISession session =
> >>> NHibernateHelper.OpenSession())
> >>>                {
> >>>                    var s =
> >>> session.CreateCriteria(typeof(Demographic)).Add(Expression.Conjunction()
> >>>                                       
> >>> .Add(Expression.Eq("birthCountry.countryGroupCode",
> >>> 16))
> >>>                                       
> >>> .Add(Expression.Eq("birthCountry.countryCode",
> >>> 9))
> >>>                                      
> >>> .Add(Expression.Eq("birthCountry.LangCode",
> >>> 1)))
> >>>                                              
> >>> .SetMaxResults(5).List<Demographic>();
> >>>                     return new Demographic();   // just for compile
> >>>                }
> >>>            }
>
> >>>            catch (Exception ex)
> >>>            {
> >>>                return null;
> >>>            }
> >>>        }
>
> >>> I get an exception when I get this row:
> >>> using (ISession session = NHibernateHelper.OpenSession())
>
> >>> The error message :
> >>> Foreign key (FK8DC307354C14518B:Olim1 [kod])) must have same number of
> >>> columns as the referenced primary key (mz_kodim [mispar_tab, kod,
> >>> kod_safa])
>
> >>> I guess it's related to the Demographic.hbm.xml file.
>
> >>> Can you help me please to solve this problem ?
>
> >>> I'm using NHibernate 2.1.2
>
> >>> Thanks,
>
> >>> David
>
> >>> --
> >>> You received this message because you are subscribed to the Google Groups 
> >>> "nhusers" group.
> >>> To post to this group, send email to [email protected].
> >>> To unsubscribe from this group, send email to 
> >>> [email protected].
> >>> For more options, visit this group 
> >>> athttp://groups.google.com/group/nhusers?hl=en.-Hide quoted text -
>
> >> - Show quoted text -
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "nhusers" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to 
> > [email protected].
> > For more options, visit this group 
> > athttp://groups.google.com/group/nhusers?hl=en.- Hide quoted text -
>
> - Show quoted text -

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to