-
recherche selon un objet
Bonjour,
je suis actuellement sur un petit projet en java SE et JPA(toplink) pour me former sur le sujet.
J'arrive à faire des requetes simples si je gère moi-même les relations entre mes tables, en utilisant les id et tout ça, mais je veux essayer d'utiliser les relations qu'offre JPA. Et là, ça coince un peu.
Voilà ma situation:
Disons que j'ai 2 table, table A et table B qui a un lien many-to-one(nommons le FA) vers A.
dans mon code, je récupère à un moment un objet de type A et je le garde en mémoire. Ensuite, je fais une recherche dans la table B de tous les objets qui ont le champ FA égal à l'objet A en mémoire.
Mon problème est comment faire cette recherche conditionnelle?
Subsidiairement, si je récupère l'objet A, faut-il garder la connexion ouverte pendant tout le temps que j'utilise cet objet? Je veux dire par là que normalement, j'ouvre et ferme ma connexion après chaque transaction afin d'optimiser les ressources allouées. Mais si je ferme ma connexion, mon objet A devient lui aussi déconnecté et il râle à chaque tentative d'utilisation par la suite.
Y a-t'il un moyen de resynchroniser un objet lors d'une reconnexion?
merci de vos réponses
-
Dans le cas ou ma question serait trop particulière, je vais la reformuler differement:
dans JPA, est-ce obligé de passer par les champs id pour filtrer des recherches sur des tables jointes, ou peut-on utiliser directement des objets comme condition de filtre dans les requetes?
Selon la manière dont j'imagine JPA, on ne devrait plus avoir de notion de champ id pour referencer un objet. Voila pourquoi je pose la question. et vu que je ne trouve aucune réponse concrete à ma question, je me suis permis de la poser ici.
-
Non tu peux comparé tes résultats avec equals mais il me semble qu'avec les outils de nos jours cette méthode est généré automatiquement
ca te permet donc de comparer les résultats non pas seulement sur une clef qui pourrait n'être qu un élément d'une clef composite mais également sur ses valeurs.
-
Dans une NamedQuery tu peux passer une Entity comme parametre. Cela s'occupera automatiquement de faire le "join" sur l'id (composite si nécessaire).
Cela n'a pas de rapport avec Object.equals(). Si tu veux par contre surcharger cette méthode, soit bien sûr de savoir ce que tu fais (piste: une @Id générée automatiquement, n'est pas là lors de la création de l'objet et "apparait" suite à la persistence de la-dite instance).
Alex
-
merci de vos réponses(et désolé du retard de la mienne")
En fait, je devais passer par une jointure de tables.
Et j'ai trouvé un document extrêmement instructif qui traite de bien des aspects techniques du JPA. C'est sous la forme d'un polycopié d'un cours, que j'ai trouvé par hasard sur le site d'une école:
http://deptinfo.unice.fr/~grin/mesco...ports/jpa6.pdf