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

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;
	/**
	 * 
 
.........
}
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
 
     List<Itemdata> results = hibQuery.list();
Parmi cette liste, je veux garder seulement les Itemdata qui sont accessible à l'utilisateur connecte.
Dans ma base de donnees, cela correspond à la requete suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
select 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;
Comme vous pouvez voir la requete est complexe.
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.