2テーブルpatient
とmedicine
を持つMySQLデータベースがあるとします。私はその下の列を表示しています。関係処理:HibernateとJDBC
患者
idPatient (int) (primary key)
first_name (varchar)
last_name (varchar)
医学
idMedicine (int) (primary key)
idPatient (int) (foreign key)
drug_name (varchar)
Medicine
表がPatient
テーブルのforiegnキーを持っていることに注意してください。私は純粋なJDBCを使用する場合
今、私は私がのために自分のデータベースをリバースエンジニアリングしかし場合Medicine
とPatient
テーブル
PatientBean
クラス
public class PatientBean
{
private int idPatient;
private String first_name;
private String last_name;
public void setIdPatient(int idPatient)
{
this.idPatient = idPatient;
}
public int getIdPatient()
{
return idPatient;
}
public void setFirstName(String first_name)
{
this.first_name = first_name;
}
public String getFirstName()
{
return first_name;
}
public void setLastName(String last_name)
{
this.last_name = last_name;
}
public String getLastName()
{
return last_name;
}
}
`MedicineBean` class
public class MedicineBean
{
private int idMedicine;
private int idPatient;
private String drug_name;
public void setIdMedicine(int idMedicine)
{
this.idMedicine = idMedicine;
}
public int getIdMedicine()
{
return idMedicine;
}
public void setIdPatient(int idPatient)
{
this.idPatient = idPatient;
}
public int getIdPatient()
{
return idPatient;
}
public void setDrugName(String drug_name)
{
this.drug_name = drug_name;
}
public String getDrugName()
{
return drug_name;
}
}
ためのBeanを作成するには、次のことを行いますPOJOファイルを生成するNetBeansのようなツールを使ってHibernateをHibernateにマッピングするなど、私は以下のようなものが期待できます。
PatientBean
クラス
public class PatientBean
{
private int idPatient;
private String first_name;
private String last_name;
private MedicineBean medicineBean;
public void setIdPatient(int idPatient)
{
this.idPatient = idPatient;
}
public int getIdPatient()
{
return idPatient;
}
public void setFirstName(String first_name)
{
this.first_name = first_name;
}
public String getFirstName()
{
return first_name;
}
public void setLastName(String last_name)
{
this.last_name = last_name;
}
public String getLastName()
{
return last_name;
}
public void setMedicineBean(String medicineBean)
{
this.medicineBean = medicineBean;
}
public String getMedicineBean()
{
return medicineBean;
}
}
MedicineBean
クラス
public class MedicineBean
{
private int idMedicine;
private int idPatient;
private String drug_name;
private Set<PatientBean> patients = new HashSet<PatientBean>(0);
public void setIdMedicine(int idMedicine)
{
this.idMedicine = idMedicine;
}
public int getIdMedicine()
{
return idMedicine;
}
public void setIdPatient(int idPatient)
{
this.idPatient = idPatient;
}
public int getIdPatient()
{
return idPatient;
}
public void setDrugName(String drug_name)
{
this.drug_name = drug_name;
}
public String getDrugName()
{
return drug_name;
}
public void setPatients(Set<PatientBean>patients)
{
this.patients = patients;
}
public Set<PatientBean> getPatients()
{
return patients;
}
}
だけでなく、この、Hibernateはまた(、多くの1つに多くを一から一、1)関係タイプをマップしますxmlファイルの中にあります。しかし、JDBCではまったく気にしませんが、同じように扱われる外部キーです。
私の質問は、なぜこの違いがあるのですか?私は、Hibernateの操作の大半は役に立たず、ただCPUを使用していると信じています。たとえば、getAllMedicines()
メソッドを呼び出すと、patients
のリストをPatient
テーブルに取得しようとしています。 99%の症例では、患者のリストではなく、すべての医薬品が必要なだけです。必要な場合は、参加して入手することができます。
これの背後にある理由は何ですか?それとも、JDBCに対しても同じ動作を維持する必要がありますか?
通常、 'patient'リストは遅延ロードされます。つまり、必要な場合にのみデータを読み込みます。 2番目の方法は、通常はOOプログラムに書き込むのと同じようにデータを含みます –
@ScaryWombat:はいわかっています。私の質問は、JDBCで同じことをしない理由です。私はそれが単に役に立たないと思う。 –
あなたがJDBCでそれをやっていない唯一の理由は、あなたがJDBCでそれをやっていないからです。 *あなたは、あなたがそれをやりたいことを完全にコントロールしているので、MedicineBeanの 'int idPatient'を' PatientBean patient'に置き換え、PatientBeanに 'List医薬品 'を加えることでそれを実現できます。彼らがどのように使用されているかによって、これは別の方法です。 –
Andreas