Bonjour,
Je suis en train de faire une recherche full texte avec HIBERNATE SEARCH.
Je veux faire une recherche full texte sur la propriete "value" de mon objet Itemdata
Quand je vais faire cette recherche, je vais obtenir une liste de resultats :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 @Indexed public class ItemData { /** * Item Data Id */ @DocumentId protected long itemDataId; /** * Item data value * The data collected for an item. This data is represented according to DataType * attribute of the Item. */ @Field protected String value; /** * ......... }
Parmi cette liste, je veux garder seulement les Itemdata qui sont accessible à l'utilisateur connecte.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 List<Itemdata> results = hibQuery.list();
Dans ma base de donnees, cela correspond à la requete suivante :
Comme vous pouvez voir la requete est complexe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14select idat.* from itemdata idat, itemgroupdata igdat, formdata fdat, eventdata edat, subject sbj, sites si, study s,groups grp, groups_users grpu, user usr where idat1.ITEM_GROUP_DATA_ID=igdat.ITEM_GROUP_DATA_ID and igdat.FORM_DATA_ID=fdat.FORM_DATA_ID and fdat.EVENT_DATA_ID=edat.EVENT_DATA_ID and edat.SUBJECT_ID=sbj.SUBJECT_ID and sbj.SITE_ID=si.SITE_ID and sbj.PROJECT_ID=s.PROJECT_ID and s.study_id=grp.study_id and grp.group_id=grpu.group_id and grpu.user_id=usr_id and usr.site_id=sbj.site_id and usr.user_id=234;
Si je veux implementer un filtre HIBERNATE SEARCH à partir de ma requete HIBERNATE SEARCH pour obtenir cette restriction, je ne vois pas comment faire.
D'apres ce que j'ai lu, les Filtres HIBERNATE SEARCH peuvent etre construit à partir des proprietes qui sont indexes par HIBERNATe SEARCH.
Par example selectionner les voitures rouges ou selectionner les voitures appartenant à un homme habitant Los Angeles.
Dans mon cas, cela reviendraitindexer toutes les relations entre Itemdata et User. C'est impossible.
Est-ceque quelqu'un a une idee comment construire un tel filtre ?
La meilleure solution serait peut-etre de recuperer par une requete de base de donne les Itemdata accesibles et de faire ensuite une intersection avec la liste obtenu avec HIBERNATE SEARCH ?
Si quelqu'un peut me venir en aide, merci.
Partager