2016-08-19 2 views
0

J'écris une requête Critères. Ma requête porte sur plusieurs critères correspondant à la propriété et à l'utilisateur des tables. Il renvoie le résultat si prop est 12 ou 13, quel que soit l'utilisateur ou si prop est NULL, alors l'utilisateur doit être connecté à UserInUser. La requête Sql a lorsque l'état de la façon suivante qui retourne 4 lignesRestriction des critères Hibernate sur plusieurs critères

where (property.PROP in (12,13) or (property.PROP is null 
       and user.loggedInUser = 'XYZ')) 

Mes critères

Criteria userQuery = session.createCriteria(User.class); 
Criteria propertyQuery = userQuery .createCriteria("property"); 

    Criterion crt = (Criterion) userQuery.add(Restrictions.eq("loggedInUser", userId)); 

propertyQuery.add(
      Restrictions.or( 
       Restrictions.in("prop",propList), 
        Restrictions.and(Restrictions.isNull("prop"),crt) 
          ) 
       ); 

Mon problème est que Restrictions.and (critère, critère) prend deux critères comme paramètre. Cependant, le deuxième critère 'crt' sur userQuery n'est pas valide lorsque le type casted (Criterion). Hibernate donnera une erreur. Comment puis-je obtenir cette fonctionnalité dans Critères. ou comment écrire des critères Restrictions.and(Restrictions.isNull("prop") , userQuery.add(Restrictions.eq("loggedInUser", userId)))

+1

joindre en utilisant createAlias ​​ne fonctionnera pas? Vous devrez peut-être rechercher des jointures dans les critères de mise en veille prolongée. –

+0

Salut Sumit Badaya création d'alias a travaillé. Merci. J'ai utilisé session.createCriteria (User.class, "user") et utilisé Restrictions.eq ("user.loggedInUser", userId); – Pan

+0

Je suis heureux que cela ait aidé –

Répondre

1

Utiliser les jointures avec les critères de mise en veille prolongée ci-dessous un exemple de code:

List cats = session.createCriteria(Cat.class) 
    .createAlias("kittens", "kit") 
    .add(Restrictions.like("kit.name", "Iz%")) 
    .list(); 

Note: Le code ci-dessus est juste un exemple de la façon d'utiliser des critères d'inscription de mise en veille prolongée.