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.
