Requête Hibernate, Restriction sur Category

Alexandre Manasé Gonzalez · le 04/06/18 à 12:42

Bonjour,

J'ai un type de contenu stocké en JcmsDB, qui possède un champ "canal" de type "Lien sur Catégorie".

Je cherche désespérement à utiliser une Restriction dans ma requête Hibernate sur ce champ catégorie.

Aucun de ces essais n'est concluant, la même erreur "could not resolve property" revient :


criteria.add(Restrictions.eq("canal", category.getId()));
criteria.add(Restrictions.eq("canalId", category.getId()));
criteria.add(Restrictions.eq("cid", category.getId()));
criteria.add(Restrictions.eq("cids", category.getId()));

 

Quelqu'un aurait une piste svp ? 

 

En vous remerciant =)

Mots-clés hibernate
5 pts
Ronan Kerdudou · le 19/06/18 à 11:41

Les catégories étant techniquement regroupées, il s'agit d'un champ multivalué géré dans des tables liées.

Pour les types "Content" ou implémentant l'interface "CategorizedDBData" les tables de catégorisation sont générées avec les suffixes "_catset" et "_allcatset".

Côté hibernate ces 2 champs ("catIdSet" et "allCatIdSet") de type collection sont utilisés en fonction du type de requete. Pour vous simplifier les choses l'API Jalios vous propose le PublicationCriteria à utiliser avec un QueryHandler afin de spécifier simplement la requète souhaitée et notamment les catégories.

Vous pourrez ainsi utiliser la méthode HibernateUtil.queryPublication et récupérer un résultat paginé suportant ainsi une éventuelle forte volumétrie.

#1

Pour tenter plus direct vous pouvez essayer quelque chose comme ça si ça répond à votre besoin ponctuel :

//recherche sur catégrie exacte ou avec ses sous-catégories
String catField = isExactCat ? DBConstants.CATEGORIES_SET_FIELD : DBConstants.ALL_CATEGORIES_SET_FIELD;
//création du critère sur les catégories
Criteria catCriteria = criteria.createCriteria(catField);
//précision de la restriction à appliquer
catCriteria.add(Restrictions.eq(CollectionPropertyNames.COLLECTION_ELEMENTS, cat.getId()));
Ronan Kerdudou · le 19/06/18 à 11:50
1 pt