有两个表,表一是记录病人退出资料,名字EXITMT;表二记录病人电子病历资料,名字EHRMT。两者是多对一的关联关系。
在EhrMt.hbm.xml映射文件中有如下代码:
<set inverse="true" lazy="true" name="exitMts">
<key column="EHR_ID" />
<one-to-many class="ExitMt" />
</set>
在ExitMt.hbm.xml映射文件中有如下代码:
<many-to-one
name="ehr"
column="EHR_ID"
class="EhrMt"
not-null="true"
>
</many-to-one>
其中Set<ExitMt> set=mt.getExitMts();返回的set,其size=0!
而如果我加入以下代码:
Set<AdmissionHistoryMt> set1=mt.getAdmissionHistoryMts();
System.err.println("返回set1 的size="+set1.size());
则返回的set1.size()=1;
也就是说,exitMts这个变量的定义有点问题?
要说明的是,mt数据类型为EhrMt,在BaseEhrMt.java中有如下方法:
private java.util.Set<com.cdms.dataaccess.model.ExitMt> exitMts;
private java.util.Set<com.cdms.dataaccess.model.AdmissionHistoryMt> admissionHistoryMts;

/** *//**
* Return the value associated with the column: exitMts
*/
public java.util.Set<com.cdms.dataaccess.model.ExitMt> getExitMts () ...{
return exitMts;
}

/** *//**
* Set the value related to the column: exitMts
* @param exitMts the exitMts value
*/
public void setExitMts (java.util.Set<com.cdms.dataaccess.model.ExitMt> exitMts) ...{
this.exitMts = exitMts;
}

public void addToexitMts (com.cdms.dataaccess.model.ExitMt exitMt) ...{
if (null == getExitMts()) setExitMts(new java.util.TreeSet<com.cdms.dataaccess.model.ExitMt>());
getExitMts().add(exitMt);
}

/** *//**
* Return the value associated with the column: admissionHistoryMts
*/
public java.util.Set<com.cdms.dataaccess.model.AdmissionHistoryMt> getAdmissionHistoryMts () ...{
System.err.println("返回admissionHistoryMts="+admissionHistoryMts.size()+" "+admissionHistoryMts.isEmpty()+" "+admissionHistoryMts);
return admissionHistoryMts;
}

/** *//**
* Set the value related to the column: admissionHistoryMts
* @param admissionHistoryMts the admissionHistoryMts value
*/
public void setAdmissionHistoryMts (java.util.Set<com.cdms.dataaccess.model.AdmissionHistoryMt> admissionHistoryMts) ...{
this.admissionHistoryMts = admissionHistoryMts;
}

public void addToadmissionHistoryMts (com.cdms.dataaccess.model.AdmissionHistoryMt admissionHistoryMt) ...{
if (null == getAdmissionHistoryMts()) setAdmissionHistoryMts(new java.util.TreeSet<com.cdms.dataaccess.model.AdmissionHistoryMt>());
getAdmissionHistoryMts().add(admissionHistoryMt);
}
为什么mt.size()=0呢?mt对象是没问题的,测试语句能够打印出正确的信息!
业务层分别对应ExitHistory.java以及Ehr.java.
有如下一段代码:
public ExitMt getExitMt(EhrMt ehr)

...{
Session s = DAOHelper.createNewSession();
EHR e = (EHR) DAOHelper.load(EHR.class, ehr.getId(), s);
EhrMt mt = (EhrMt) e.getTarget();


/**//* 测试mt对象 */
System.err.println("mt.getAddress()="+mt.getAddress());
System.err.println("mt.getBloodTypeCode()="+mt.getBloodTypeCode());
System.err.println("mt..getExEhrNO()="+mt.getExEhrNO());

Set<ExitMt> set=mt.getExitMts();
System.err.println("返回set 的size="+set.size());
ExitMt em=null;
List<ExitMt> list=null;
try

...{
for (Iterator iter = set.iterator(); iter.hasNext();)

...{
list.add((ExitMt)iter.next());
}
}
catch(Exception ex)

...{
ex.printStackTrace();
}
em=list.get(0);
System.err.println("返回em="+em);
DAOHelper.closeSession(s);
return em;
}
public ExitMt getExitMt(EhrMt ehr)
...{
Session s = DAOHelper.createNewSession();
EHR e = (EHR) DAOHelper.load(EHR.class, ehr.getId(), s);
EhrMt mt = (EhrMt) e.getTarget();

/**//* 测试mt对象 */
System.err.println("mt.getAddress()="+mt.getAddress());
System.err.println("mt.getBloodTypeCode()="+mt.getBloodTypeCode());
System.err.println("mt..getExEhrNO()="+mt.getExEhrNO());
Set<ExitMt> set=mt.getExitMts();
System.err.println("返回set 的size="+set.size());
ExitMt em=null;
List<ExitMt> list=null;
try
...{
for (Iterator iter = set.iterator(); iter.hasNext();)
...{
list.add((ExitMt)iter.next());
}
}
catch(Exception ex)
...{
ex.printStackTrace();
}
em=list.get(0);
System.err.println("返回em="+em);
DAOHelper.closeSession(s);
return em;
} 
648

被折叠的 条评论
为什么被折叠?



