我有两张表:patient_data
和patient_diagnosis
Patient_data
包含患者的个人数据,例如:pid (pkey)
,gender
,birth_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_data
或patient_diagnosis
创建课程。但是,只创建了具有这些表的字段组合的Emr
类。
答案 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>
我希望这会对你有所帮助。