Mysql
 sql >> Base de données >  >> RDS >> Mysql

Hibernation de la requête de recherche

Après avoir examiné votre requête, je me rends compte de quelques problèmes avec votre HQL qui doivent être résolus. Voir la section ici :

https://docs .jboss.org/hibernate/orm/3.3/reference/en-US/html/queryhql.html#queryhql-joins

Ainsi, en faisant un FETCH ALL PROPERTIES, vous n'avez pas la possibilité de filtrer sur les enfants z dans la même requête. Votre requête devrait alors ressembler à ceci :

SELECT new com.mycompany.kwestionariusz.Osoba(
  o.id, o.imie, o.nazwisko, o.telefon, o.email,
  o.uczelnia, o.doswiadczenie, o.skadSlyszal)
from Osoba as o
  INNER JOIN o.zainteresowania as z
WHERE ((o.id) = (id_osoby))
and (LOWER(z.zainteresowanie) LIKE ?)
and (LOWER(z.zainteresowanie) LIKE ?)
and (LOWER(z.zainteresowanie) LIKE ?)
and (LOWER(z.zainteresowanie) LIKE ?)
and (LOWER(z.zainteresowanie) LIKE ?)

La seule chose dont je ne suis pas sûr, c'est cette propriété ici :

(id_osoby)

Je ne vois pas cela être aliasé n'importe où et je ne vois pas cette colonne dans aucune de vos tables. Êtes-vous sûr que cela est nécessaire ?

Cela vous donnera donc maintenant o entités parentes qui ont été filtrées par les propriétés des z enfants. Les enfants z sont cependant paresseux, vous devez donc les interroger indépendamment par l'ID z ou vous devriez pouvoir les récupérer paresseux dans la même transaction d'hibernation simplement en appelant la méthode getter pour renvoyer la liste des enfants z.