如我有表
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两个记录信息才能取到我的这一行信息
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两个记录信息才能取到我的这一行信息
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货