@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>();
}

@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;
}

Por ahora puedo recordar sólo los médicos información por este criterio:

Criteria query = session.createCriteria(doctor.class);
query.createCriteria("patients", "p");
query.add(Restrictions.eq("p.phone", phone));
List<doctor> doctorList = (ArrayList<doctor>) query.list();

Cómo puedo con hibernate criterios de recuperación, dando paciente de teléfono, su médico la información y en algunos pacientes la información?

Algo como : teléfono=3423423424 , entonces la respuesta es :

————-médico info———————————-patientinfo(sistólica,diastólica)———————–

  1 "Dr dre" sdfssd 243242 [email protected].com  160 170

donde 160 170 son la información del paciente

Si no con criterios, con HQL?

InformationsquelleAutor oikonomopo | 2012-08-24

4 Comentarios

  1. 1

    Tiene asignación de tipo bidireccional, de manera que desde cada médico que usted puede conseguir sus pacientes y de cada paciente, usted puede obtener su información de doctor. Si necesita una lista con los pacientes en lugar de una lista de médicos que acaba de crear análogos Criterios para los pacientes. session.createCriteria(patient.class), con restricciones. usted no tiene que hacerlo con ganas. En la mayoría de los casos no tenemos ganas de ir a buscar. Es mucho mejor inicializar (Hibernate.inicializar) la colección de proxy o si usted necesita los objetos fuera de la sesión de hibernate.

    btw uso de camello caso al nombre de las clases de java. Es ampliamente utilizado convención.

    • cada paciente tiene un médico.Así que quiero que el médico info donde su paciente teléfono es «45353534» + la información del paciente.Se puede hacer esto? [Médico.teléfono Médico.correo electrónico del Paciente.diastólica del Paciente.Sistólica]
    • por supuesto que se puede hacer. crear criterios para el paciente de clase como escribí anteriormente, con restricciones para el número de teléfono específico. a continuación, aparecerá una lista de los pacientes que tienen este número de teléfono específico. a continuación, puedes iterar a través de esta lista y para cada paciente a lograr su médico. si usted quisiera que en la sesión de hibernate usted no tiene que tener inicializado proxy. cuando se obtiene médico de la paciente por paciente.getDoctor() que tienen todas las propiedades de médico disponible. es java y estos son objetos! el único truco aquí es recordar que inicializar los proxies.
    • la lectura de la documentación de hibernate puede ser útil también.
    • leer un poco acerca de java y los objetos, y mirar la documentación de hibernate. estos son los objetos, si desea que dicha información en una cadena, tiene iterar a través del modelo de objetos, y crear una cadena de propiedades de los objetos por sí mismo en el código java.
    • Así que con los criterios de la consulta que he usado anteriormente puedo recuperar médico info.Para la recuperación de su paciente en particular, voy a hacer: para (doctor d : doctorList) {respuesta = respuesta.concat(d.getPhone()+ «» + d.getEmail()+» «+d.getPatient().diastólica+» ?»+d.getPatient().sistólica);}
    • casi. para el pre-filtro pacientes sólo con estos que han seleccionado número puede utilizar left outer join como este: Criterios de consulta = período de sesiones.createCriteria(doctor.class); query.createCriteria(«pacientes», «p», CriteriaSpecification.LEFT_JOIN).agregar(Restricciones.eq(«p.teléfono», teléfono)); a continuación, usted recibirá los médicos con sólo estos pacientes que tienen el restringido número de teléfono
    • si se puede asumir que cada doctro tiene sólo un paciente con número de teléfono seleccionado, a continuación, usted puede hacer d.getPhone +…+d.getEmail+…+d.getPatients().get(0).diastólica etc. (recordemos que un médico tiene una lista de los pacientes, por lo que potencialmente puede tener uno con el mismo número de teléfono
    • He resuelto utilizando en lugar de get(0).getSystolic –> iterator.siguiente.getSystolic! gracias por la ayuda!

  2. 2

    Lo que queremos es la siguiente.

    Con Hibernate Criterios de API:

    Criteria query = sessionFactory.getCurrentSession().
    createCriteria(Patient.class, "patient");
    query.setProjection(Projections.projectionList().
    add(Projections.property("patient.doctor")).
    add(Projections.property("patient.systolic")).
    add(Projections.property("patient.diastolic")));
    query.add(Restrictions.eq("patient.phone", phone));
    return query.list();

    Con HQL (en realidad sólo JPQL):

    select p.doctor, p.systolic, p.diastolic from Patient p where p.phone = ?1

    Lo que se obtiene en el resultado es el valor de Tipo de List<Object[]>.
    También añadir @Cascade(value=CascadeType.SAVE_UPDATE) a doctor campo en su Patient clase.

  3. 1

    La razón por la cual su consulta devuelve sólo los doctores de la información (y no la información del paciente) es porque para una relación OneToMany, FetchType se establece por defecto PEREZOSO, si especifica fetch tipo ANSIOSO, hibernate también a los pacientes regresar.

    @OneToMany(targetEntity = patient.class, cascade = CascadeType.ALL, mappedBy = "doctor", fetch = FetchType.EAGER)
    • Cómo se hace eso?Tengo el doctorList .Cómo recuperar el paciente y el médico info.Quiero pasar a una cadena.»médico de teléfono es +médico.teléfono + … + «paciente diastólica es paciente».diastólica +…
  4. 1

    En caso de que usted está usando HibernateTemplate

    String hql = "from Boo where id in (:listParam)";
    String[] params = { "listParam" };
    Object[] values = { list};
    List boos = getHibernateTemplate().findByNamedParam(hql, params, values);

    Citado de Foro De Primavera

Dejar respuesta

Please enter your comment!
Please enter your name here