Comment jointure de deux tables de l'utilisation d'Hibernate HQL ou Critères?
@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;
}
Pour l'instant je peux récupérer seulement les médecins information par ces critères:
Criteria query = session.createCriteria(doctor.class);
query.createCriteria("patients", "p");
query.add(Restrictions.eq("p.phone", phone));
List<doctor> doctorList = (ArrayList<doctor>) query.list();
Comment je peux avec hibernate critères de récupérer en donnant de téléphone du patient, son médecin et des patients de l'information?
Quelque chose comme : téléphone=3423423424 , puis answear est :
-------------médecin de l'info----------------------------------patientinfo(systolique,diastolique)-----------------------
1 "Dr dre" sdfssd 243242 drdre@gmail.com 160 170
où 160 170
sont l'information sur le patient
Si ce n'est avec les critères, avec HQL?
OriginalL'auteur oikonomopo | 2012-08-24
Vous devez vous connecter pour publier un commentaire.
Vous avez mise en correspondance bidirectionnelle donc, à partir de chaque médecin, vous pouvez obtenir de ses patients et de chaque patient, vous pouvez obtenir de son médecin de l'information. Si vous avez besoin d'une liste avec les patients, au lieu d'une liste de médecins il suffit de créer analogue Critères pour les patients.
session.createCriteria(patient.class)
, avec les restrictions nécessaires. vous n'avez pas à faire envie. Dans la plupart des cas, nous n'avons pas besoin chargement agressif. Il est beaucoup mieux initialiser (mise en veille prolongée.initialiser) la collection ou un proxy si vous avez besoin des objets en dehors de la session hibernate.btw utilisation de chameau cas lorsque vous nommez des classes java. Il est largement utilisé convention.
de cours qui peut être fait. créer des critères pour les patients de la classe comme je l'ai écrit ci-dessus avec des restrictions pour numéro de téléphone spécifique. ensuite, vous obtiendrez une liste de patients qui ont ce numéro de téléphone spécifique. ensuite, vous pouvez parcourir cette liste et pour chaque patient pour obtenir son médecin. si vous souhaitez en session hibernate vous n'avez pas à avoir initialisé proxy. lorsque vous aurez médecin du patient par patient.getDoctor() est bien sûr de toutes les propriétés de médecin disponible. c'est de java, et ce sont ces objets! le seul truc c'est que de se rappeler initialiser les procurations.
lecture de la documentation hibernate peut être utile aussi.
lire un peu de java et les objets, et à hibernate de la documentation. ce sont des objets, si vous souhaitez que ces informations dans une chaîne, vous devez parcourir modèle d'objet et de créer une chaîne de propriétés des objets par vous-même dans le code java.
si vous pouvez supposer que chaque doctro n'a qu'un patient avec une sélection de numéro de téléphone, puis vous pouvez faire d.getPhone +...+d.getEmail+...+d.getPatients().get(0).diastolique etc. (rappelez-vous qu'un médecin a une liste de patients, donc potentiellement peut avoir un avec le même numéro de téléphone
OriginalL'auteur Łukasz Rzeszotarski
Ce que vous voulez est la suivante.
Avec Hibernate Critères de l'API:
Avec HQL (en fait juste JPQL):
Ce que vous obtenez le résultat est une valeur de Type
List<Object[]>
.Également ajouter
@Cascade(value=CascadeType.SAVE_UPDATE)
àdoctor
domaine sur votrePatient
classe.OriginalL'auteur Oleksandr Bondarenko
La raison pour laquelle votre requête ne renvoie que les médecins de l'information (et non pas l'information sur le patient), c'est parce pour une relation OneToMany, FetchType par défaut est PARESSEUX, si vous spécifiez le type d'extraction à être IMPATIENTE, hibernate est également de retour patients.
OriginalL'auteur gresdiplitude
Dans le cas où vous utilisez HibernateTemplate
Cité de Forum Du Printemps
OriginalL'auteur hidralisk