2010-08-18 5 views
0

J'ai une table Utilisateurs qui contient deux types d'utilisateurs différents (A et B). Les utilisateurs de type A peuvent avoir des relations avec des utilisateurs de type B (qui sont enregistrés dans une table Relations). Le nombre de relations qu'un utilisateur de type A peut avoir avec des utilisateurs de type B est enregistré dans un champ d'une autre table.Utilisation d'Hibernate pour extraire des enregistrements en fonction du nombre d'enregistrements dans une autre table

Je souhaite que Hibernate renvoie tous les utilisateurs de type A dont toutes les relations ne sont pas établies. J'ai une requête SQL qui va le faire. Qu'est-ce que je dois faire?

EDIT

J'ai réussi à obtenir ce travail en lançant ma requête dans un session.createSQLQuery(), mais il semble bizarre d'avoir un bloc de SQL au milieu de tout cela au point, génial code hibernate. Je pense que je préfère l'avoir dans les objets HSQL ou Hibernate, si possible.

C'est le pseudo-requête que je suis en train de se convertir à l'HSQL:

select userId 
from (
    select user_id, max_mentees, count(connection_id) num_mentees 
    from user_table 
    join mentor on mentor_id = user_id and user_status = 'ACTIVE' 
    left join connections on connection_mentor_id = mentor_id 
    and connection_status = 'ACTIVE' and connection_end > sysdate 
    group by user_id, max_mentees, connection_id 
) 
where (max_mentees > num_mentees) 
group by user_id 
+0

'Je veux que Hibernate retourne tous les utilisateurs de type A qui n'ont pas toutes leurs relations établies Quand? En faisant quoi? –

+0

Fondamentalement, les utilisateurs A seront les mentors des utilisateurs B et un utilisateur a une limite de combien de "mentorés" ils peuvent avoir à la fois. Le nombre est de voir combien d'utilisateurs B (mentoré) sont assignés à l'utilisateur A (mentor) afin que nous puissions le comparer au nombre limite dans l'autre table. –

Répondre

0

En supposant que vous avez une classe de mentor qui a une relation un à plusieurs avec une classe de MentorRelationship, vous feriez quelque chose comme ceci:

session.createQuery("from Mentor mentor where mentor.menteeRelationships.size < mentor.menteeRelationships.maxNumberOfRelationships") 
0

Je veux avoir Hibernate retourner tous les utilisateurs de type A qui ne pas toutes leurs relations établies. J'ai une requête SQL qui va le faire. Qu'est-ce que je dois faire?

Honnêtement, votre question est encore très floue (au moins pour moi) et sans voir le SQL, sans voir votre modèle d'objet et les applications, il semble difficile d'être précis et ma suggestion serait soit:

  • convertir SQL en HQL ~ ou ~
  • exécuter votre requête comme Native Query

Si vous attendez une réponse plus détaillée, vous devriez l'OMI fournir plus de détails.

+0

J'ai mis à jour ma question avec la requête que j'essaie de reproduire. –

Questions connexes