<?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="Contract.Domain.Teacher,CCRModel" table="TEACHER"> <id name="Id" type="int" column="Id" > <generator class="native" /> </id> <property name="TName" column="T_NAME" /> <bag name="Students" cascade="all"> <key column="TEACHER_ID" not-null="true"/> <one-to-many class="Contract.Domain.Student"/> </bag> </class> </hibernate-mapping> <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="Contract.Domain.Student,CCRModel" table="STUDENT"> <id name="Id" type="int" column="Id" > <generator class="native" /> </id> <property name="SName" column="S_NAME" /> <many-to-one name="Teacher" class="Contract.Domain.Teacher" column="TEACHER_ID" not-null="true"/> </class> </hibernate-mapping> var session1 = Dao.GetSession(); Teacher t = new Teacher() { TName = "laoshi" }; Student s1 = new Student() { SName = "t1" }; Student s2 = new Student() { SName = "t2" }; t.Students = new List<Student>(); t.Students.Add(s1); t.Students.Add(s2); s1.Teacher = t; s2.Teacher = t; session1.SaveOrUpdate(t); session1.Flush(); var gt=session1.Get<Teacher>(106309155); var stu = session1.Get<Student>(106309157); return; 多对多 关系拆分 分为1和2和3三个步骤,其中BasIssuer和BasCreditRating两个都是一端各自拥有一个1对多的关系,而中间实体是多端配置有两个多对一的关系 1. <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="Contract.Domain.BasIssuer,BASModel" table="BAS_ISSUER"> <id name="Id" column="ISSUER_ID" unsaved-value="null"> <generator class="sequence" > <param name="sequence">BAS_MODULE_SEQ</param> </generator> </id> <property name="IssuerCode" column="ISSUER_CODE" /> <property name="IssuerName" column="ISSUER_NAME" /> <!--<property name="Region" column="REGION_ID" />--> <property name="CreateUid" column="CREATE_UID" /> <property name="CreateUname" column="CREATE_UNAME" /> <property name="CreateOid" column="CREATE_OID" /> <property name="CreatePid" column="CREATE_PID" /> <property name="CreateDate" column="CREATE_DATE" /> <property name="LastModUid" column="LAST_MOD_UID" /> <property name="LastModUname" column="LAST_MOD_UNAME" /> <property name="LastModOid" column="LAST_MOD_OID" /> <property name="LastModPid" column="LAST_MOD_PID" /> <property name="LastModDatetime" column="LAST_MOD_DATETIME" /> <property name="Status" column="STATUS" /> <property name="IsDeleted" column="IS_DELETED"/> <!--<property name="CreditRate" column="CREDIT_RATE" />--> <!--<property name="CreditAgencyId" column="CREDIT_AGENCY_ID" />--> <property name="IssuerType" column="ISSUER_TYPE" /> <!--<property name="IndustrySectorId" column="INDUSTRY_SECTOR_ID" />--> <property name="CreatedEmployeeName" column="CREATED_EMPLOYEE_NAME" update="false"/> <property name="CreatedEmployeeId" column="CREATED_EMPLOYEE_ID" update="false"/> <many-to-one name="Region" class="Contract.Domain.BasRegion" column="REGION_ID"/> <many-to-one name="IndustrySector" class="Contract.Domain.BasSectorInfo" column="INDUSTRY_SECTOR_ID"/> <bag name="IssuerRating" cascade="all"> <key column="E_ID" /> <one-to-many class="Contract.Domain.RealCreditEntity,BASModel" /> </bag> </class> </hibernate-mapping> 2. <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="Contract.Domain.BasCreditRating,BasModel" table="BAS_CREDIT_RATING"> <id name="Id" type="string" column="Id" unsaved-value="null"> <generator class="sequence" > <param name="sequence">BAS_MODULE_SEQ</param> </generator> </id> <property name="CreditRatingCode" > <column name="CREDIT_RATING_CODE"> <comment> 信用评级编码 </comment> </column> </property> <property name="CreditRatingName" > <column name="CREDIT_RATING_NAME"> <comment> 信用评级名称 </comment> </column> </property> <property name="RatingTypeLookupId" > <column name="RATING_TYPE_LOOKUP_ID"> <comment> 评级类型ID </comment> </column> </property> <!--<property name="CreditRatingAgencyId" > <column name="CREDIT_RATING_AGENCY_ID"> <comment> 评级机构ID </comment> </column> </property>--> <property name="CreditRatingValue" > <column name="CREDIT_RATING_VALUE"> <comment> 评级分数 </comment> </column> </property> <property name="Remarks" > <column name="REMARKS"> <comment> 备注 </comment> </column> </property> <property name="CreatedBy" > <column name="CREATED_BY"> <comment> 创建人 </comment> </column> </property> <property name="CreateDate" update="false"> <column name="CREATE_DATE"> <comment> 创建日期 </comment> </column> </property> <property name="UpdatedBy" > <column name="UPDATED_BY"> <comment> 更新人 </comment> </column> </property> <property name="UpdateDate" > <column name="UPDATE_DATE"> <comment> 更新日期 </comment> </column> </property> <property name="CreatedEmployeeName" update="false"> <column name="CREATED_EMPLOYEE_NAME"> <comment> created_employee_name </comment> </column> </property> <property name="CreatedEmployeeId" update="false"> <column name="CREATED_EMPLOYEE_ID"> <comment> created_employee_id </comment> </column> </property> <property name="Version" > <column name="VERSION"> <comment> 评级版本 </comment> </column> </property> <property name="IsDeleted" > <column name="IS_DELETED"> <comment> 假删除标记 </comment> </column> </property> <bag name="RatingIssuer" > <key column="C_ID" /> <one-to-many class="Contract.Domain.RealCreditEntity,BASModel" /> </bag> <many-to-one name="CreditRatingAgency" class="Contract.Domain.BasCreditRatingAgency" column="CREDIT_RATING_AGENCY_ID"/> </class> </hibernate-mapping> 3. <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="Contract.Domain.RealCreditEntity,BASModel" table="RELA_CREDIT_ENTITY"> <id name="Id" column="ID" unsaved-value="null"> <generator class="sequence" > <param name="sequence">BAS_MODULE_SEQ</param> </generator> </id> <property name="RatingDate" column="RATING_DATE" /> <many-to-one name="Issuer" class="Contract.Domain.BasIssuer" column="E_ID"/> <many-to-one name="Rating" class="Contract.Domain.BasCreditRating" column="C_ID"/> </class> </hibernate-mapping>