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)))
joindre en utilisant createAlias ne fonctionnera pas? Vous devrez peut-être rechercher des jointures dans les critères de mise en veille prolongée. –
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
Je suis heureux que cela ait aidé –