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 at 
> http://groups.google.com/group/nhusers?hl=en.
>

-- 
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