I have the same opinion that Fabio, but i also want to add that your schema is broken. If the table country has 3 columns for the PK you need three columns in each FK. So, my question is prety obvious, why do you have this? Or what do you expect? You can have many records with the same value for country code.
2010/10/17, DavidOs <[email protected]>: > 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 at > http://groups.google.com/group/nhusers?hl=en. > > -- Enviado desde mi dispositivo móvil -- 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.
