2

Webサービスでは、患者の電話に基づいて医師とその患者の情報を取得する次の機能があります。

    public String findDoctorOfPatient(String phone) {
    AnnotationConfiguration config = new AnnotationConfiguration();
    config.configure("hibernate.cfg.xml");
    SessionFactory factory = config.buildSessionFactory();
    Session session = factory.openSession();

    session.beginTransaction();

    Criteria query = session.createCriteria(doctor.class);
    query.createCriteria("patients", "p");
    query.add(Restrictions.eq("p.phone", phone));
    List<doctor> doctorList = (ArrayList<doctor>) query.list();
    session.getTransaction().commit();
    String answear = "";
    for (doctor d : doctorList) {
        answear = answear.concat("docPhone" + d.getPhone() + "docEmail"
                + d.getEmail() + "patDia"
                + d.getPatients().iterator().next().getDiastolic()
                + "patSys"
                + d.getPatients().iterator().next().getSystolic());
    }
    if (doctorList.isEmpty()) {
        session.close();
        factory.close();
        return "No Doctor!";
    } else {
        session.close();
        factory.close();
        return answear;
    }
}

問題は、1人の患者がいる場合は問題ありませんが、2人目の患者を追加すると、最初の患者の電話の基準を設定しているにもかかわらず、最後の患者の詳細が表示されます。

私は2つのテーブルを持っています:

1.doctor(id、username、password、phone、email)2.patient(id、name、surname、phone、systolic、diastolic、doctorid(FKはdoctor.idを指します))

hibernate.cfg.xmlを適切に構成しました。

そして、私は医者と患者のためのクラスを設定しました:

@Entity
public class doctor {
    @Id
    private int id;
    private String username;
    private String password;
    private String phone;
    private String email;

    @OneToMany(targetEntity = patient.class, cascade = CascadeType.ALL, mappedBy = "doctor")
    @Cascade(value = org.hibernate.annotations.CascadeType.ALL)
    private Collection<patient> patients = new ArrayList<patient>();

    public Collection<patient> getPatients() {
        return patients;
    }

    public void setPatients(Collection<patient> patients) {
        this.patients = patients;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

@Entity
public class patient {
    @Id
    private int id;
    private String name;
    private String surname;
    private String phone;
    private int systolic;
    private int diastolic;

    @ManyToOne
    private doctor doctor;

    public doctor getDoctor() {
        return doctor;
    }

    public void setDoctor(doctor doctor) {
        this.doctor = doctor;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSurname() {
        return surname;
    }

    public void setSurname(String surname) {
        this.surname = surname;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public int getSystolic() {
        return systolic;
    }

    public void setSystolic(int systolic) {
        this.systolic = systolic;
    }

    public int getDiastolic() {
        return diastolic;
    }

    public void setDiastolic(int diastolic) {
        this.diastolic = diastolic;
    }
}

医者 忍耐強い patientRelationView![] [3]

このWebサービスでは、応答は常に同じです(携帯電話番号が与えられた場合)。それは私に常に2番目の患者情報であるpatSys=130とpatDia=80を与えます!.Webサービスで何かが間違っているに違いありませんが、私にはすべて問題ないようです!

4

1 に答える 1

1

Criteriaにオブジェクトを作成する必要があり、ここでPatient取得する必要はありませんtransaction

Criteria query = session.createCriteria(Patient.class)
                    .add(Restrictions.eq("phone", phone));

List<Patient> patList = (ArrayList<Patient>) query.list();

String result="";
if(!patList.isEmpty()) {
    Patient patient=patList.get(0);
    result="Doc Phone : " + patient.getDoctor().getPhone();
}
return result;
于 2012-11-02T10:26:54.517 に答える