2016-06-03 7 views
1

Ich habe zwei Tabellen: patient_data und patient_diagnosisHibernate Mapping - Join von zwei Tabelle einer flachen Klasse

Patient_data persönliche Daten des Patienten enthält wie: pid (pkey), gender, birth_date

patient_diagnosis die Diagnosedaten der enthält registrierte Patienten. Es hat Felder wie: record_id (pkey), pid (fkey to patient_data(pid)), diagnosis_date und andere verwandte Felder.

Nun möchte ich diese beiden Tabellen auf pid verbinden und alle diese Felder in einem einzigen Objekttyp haben. Hier

ist die Zuordnungsdatei:

<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> 

Aber die Verbindung trifft auf patient_diagnosis.record_id = patient_data.pid anstelle von patient_diagnosis.pid = patient_data.pid d.h. HQL trifft auf Primärschlüssel der ersten Tabelle mit der genannten zweiten Spalte aus Tabelle.

Bitte geben Sie die Lösung an, damit die Verbindung auf der erwähnten Spalte von der ersten mit der erwähnten Spalte aus der zweiten Tabelle angewendet werden kann. Oder gibt es einen anderen Ausweg?

Bitte beachten Sie, dass, wenn ich keine Klassen für patient_data oder patient_diagnosis erstellen. Aber, nur Emr Klasse mit einer Kombination von Feldern dieser Tabellen erstellt wird.

+0

Warum trennen Sie sie nicht in zwei xmls. –

Antwort

0

Versuchen geben Fremdschlüssel

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

Ich bin nicht sicher, aber vielleicht sollte diese Arbeit.

Und

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

Ähnlich in Join-Klasse

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

Ich hoffe, das Ihnen hilft.

+0

Wenn Spaltenname = pid als ID verwendet wird, werden Patientendaten mit Mehrfachdiagnose gelöscht. Wir hätten nur ein Ergebnis mit einem PID. Außerdem müssen wir für ein Eins-zu-eins-Mapping ein Objekt einer anderen Klasse mit einer Klasse deklarieren. Aber wie gesagt, ich bin daran interessiert, nur eine flache Klasse zu haben. – Amber

+0

Verwenden Sie mit mit beitreten. –