我有两个表: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
类。
最佳答案
尝试给出外键
<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>
同样在Join类中
<one-to-one name="patient_diagnosis" class="in.Models.Emr"
cascade="save-update"></one-to-one>
希望对你有帮助
关于java - Hibernate 映射 - 将两个表连接到一个平面类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37606467/