Hibernate Mapping - 将两个表连接到一个平面类

时间:2016-06-03 05:20:18

标签: java mysql hibernate join mapping

我有两张表:patient_datapatient_diagnosis

Patient_data包含患者的个人数据,例如:pid (pkey)genderbirth_date

patient_diagnosis包含已注册患者的诊断数据。它包含以下字段:record_id (pkey)pid (fkey to patient_data(pid))diagnosis_date和其他相关字段。

现在,我想在pid上加入这两个表,并将所有这些字段放在一个对象类型中。

这是映射文件:

<hibernate-mapping>
<class catalog="emr" name="in.Models.Emr" table="patient_diagnosis">
<id name="recordid" type="long">
     <column name="record_id"/>
</id>

<property name="diagnosisDate" type="timestamp">
      <column length="19" name="diagnosis_date" not-null="true"/>
</property>

<property name="snomedTermPrimary" type="long">
      <column name="snomed_term_primary" not-null="true" />
</property>

<property name="snomedTermSecondary" type="string">
      <column name="snomed_term_secondary" />
</property>

<property name="episodeNo" type="long">
      <column name="episode_no" not-null="true" />
</property>

<property name="pid" type="long">
      <column name="pid" not-null="true" />
</property>


<join table="patient_data">
     <key column="pid"/>
     <property name="gender" type="string">
          <column name="gender" not-null="true"/>
     </property>
     <property name="birthDate" type="timestamp">
          <column length="19" name="birth_date" not-null="true"/>
     </property>
</join>

</class>
</hibernate-mapping>

但是,联接适用于patient_diagnosis.record_id = patient_data.pid而不是patient_diagnosis.pid = patient_data.pid,即HQL适用于第一个表的主键以及第二个表中提到的列。

请提供解决方案,以便可以在第二个表中提到的列的第一个列上应用连接。还是有另一种出路吗?

请注意,如果我没有为patient_datapatient_diagnosis创建课程。但是,只创建了具有这些表的字段组合的Emr类。

1 个答案:

答案 0 :(得分:0)

尝试提供外键

 <id name="pid" type="java.lang.Long">
        <column name="pid" />
        <generator class="foreign">
            <param name="property">patient_data</param>
        </generator>
    </id>

我不确定,但也许这应该有用。

并且

 <one-to-one name="patient_data" class="in.Models.Emr"
        cascade="save-update"></one-to-one>

类似于加入课程

  <one-to-one name="patient_diagnosis" class="in.Models.Emr"
        cascade="save-update"></one-to-one>

我希望这会对你有所帮助。