如我有表
Company              公司表
CompanyCode          公司代码(主)
CompanyName          公司名称Manager              管理员
CompanyCode          管理员公司(主)
ManagerCode          管理员代码(主)
ManagerName          管理员名称
----------------------------------------
HNibernate生成的xml 这个没什么问题<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="YK.Shop.Model.Sys.Company, YK.Shop.Model" table="Sys_Company">
    <id name="CompanyCode" type="String" unsaved-value="null">
      <column name="CompanyCode" length="20" sql-type="varchar" not-null="true" unique="true" index="PK_Sys_Company" />
      <generator class="assigned" />
    </id>
    <property name="CompanyName" type="String">
      <column name="CompanyName" length="200" sql-type="varchar" not-null="true" />
    </property>
    <bag name="ManagerList" inverse="true" lazy="true" cascade="none">
      <key column="CompanyCode"/>
      <one-to-many class="YK.Shop.Model.Sys.Manager, YK.Shop.Model"/>
    </bag>
  </class>
</hibernate-mapping>NHibernate Manager xml<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="YK.Shop.Model.Sys.Manager, YK.Shop.Model" table="Sys_Manager">
    <composite-id name="ManagerPk" class="YK.Shop.Model.Sys.ManagerPK,YK.Shop.Model">
      <key-many-to-one name="Company" class="YK.Shop.Model.Sys.Manager,YK.Shop.Model">
        <column name="CompanyCode"></column>
      </key-many-to-one>
      <key-property name="ManagerCode">
        <column name="ManagerCode" length="50" sql-type="varchar" not-null="true" />
      </key-property>
    </composite-id>   
    <property name="Name" type="String">
      <column name="Name" length="50" sql-type="varchar" not-null="true" />
    </property>
  </class>
</hibernate-mapping>按照NHibernate的话他应该是这样写的;
但是这里有一个问题是,在我插入一条管理员记录的时候
一般我的页面只会接收到
CompanyCode="0001";
ManagerCode="0001";
ManagerName="Jerry";
这个时候我每次插入一件新记录的时候我都得先Get出0001的公司再赋值给这个Manager对像
对,你们可能会说插入前你不用判断这个Company是否存在吗?
是的:这一步我一般是给数据库去判断的了
就算这样是所谓的面向对像,也就是这个Manager是这个Company的子级所以要得出Company,也就算了
但是:
在我Get一条数据的时候我还要取出这个Company这个就有点说不过去了
比如这里我要Get我上面的Manager就是
ManagerPK managerPk = new ManagerPK();
managerPk.Company = new CompanyDao().Get("0001");
managerPk.ManagerCode = "0001";
Manager mode = new ManagerDao.Get(managerPk);
那这里的new CompanyDao().Get("0001")这一步去取我的这个company对像我感觉是没有任何意义的啊
为什么不用
managerPk.CompanyCode = "0001";
managerPk.ManagerCode = "0001";
的这种办法呢?后来我改为我的这一后面的方法,但改完后却没有办法实现Mang-to-one bag 方法,我又感觉很郁闷他大家帮忙分析一下,谢谢PS:如果用第一种方法的话更要命的是:
如果我有一个管理员权限表,
因为他就为三个主键
CompanyCode
ManagerCode
RoleID
那么我要取出一条记录的话,我就得先读出Company,Manger两个记录信息才能取到我的这一行信息