Bonjour, ce que je tente de faire actuellement c'est; utiliser un filtre hibernate sur 2 champs d'une table, je passe différents parametres au filtre.
Le soucis là, c'est qu'il me renvoie x fois le meme tuple, et je vois pas pourquoi.
voici le code deja:
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 List<IJob> jobs = new ArrayList<IJob>(); List<IJob> tempJobs = new ArrayList<IJob>(); long today = new Date().getTime(); FullTextEntityManager fem = Search.getFullTextEntityManager(em); Analyzer analyzer = fem.getSearchFactory().getAnalyzer( SOLR_JOB_ANALYZER_NAME); MultiFieldQueryParser parser = new MultiFieldQueryParser(new String[] { "name", "description" }, analyzer); DecimalFormat nfId = new DecimalFormat("000", DecimalFormatSymbols .getInstance(Locale.US)); if (filter != null && !"".equals(filter.trim()) && (!filter.startsWith("ent:"))) { try { // Query query = // parser.parse(returnLuceneFormatedString(filter)); parser.setAllowLeadingWildcard(true); // Lucene parser don't want this char if (filter != null) { filter = filter.replace(':', ' ').trim(); filter = filter.replace('^', ' ').trim(); } // for (String filtr : filter.split(" ")){ // filter += " *" + filtr + "*"; // filter += " " + filtr + "*"; // filter += " *" + filtr ; // } Query query = parser.parse(StringUtils.convertNonAscii(filter)); FullTextQuery hibQuery = fem.createFullTextQuery(query, JobEntity.class); for(int c=0 ; c < zipCode.length ; c++ ){ for(int d=0 ; d < typeId.length ; d++ ){ hibQuery.enableFullTextFilter("JobEntity.filter.geoZipCode") .setParameter("publicationDelay", parution) .setParameter("functionId", nfId.format(functionId)) .setParameter("typeId", nfId.format(Long.parseLong(typeId[d]))) .setParameter("zipCode", zipCode[c]); for(int j=0; j < hibQuery.getResultList().size() ; j++){ tempJobs.add((IJob) hibQuery.getResultList().get(j)); } } }
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 public class GeoZipFilter { private long publicationDelay; private String functionId; private String typeId; private String zipCode; @Key public FilterKey getKey() { StandardFilterKey key = new StandardFilterKey(); key.addParameter(publicationDelay); key.addParameter(functionId); key.addParameter(typeId); key.addParameter(zipCode); return key; } @Factory public Filter getFilter() { ChainedFilter filter = new ChainedFilter() { /** * */ private static final long serialVersionUID = 8725514094671660409L; public BitSet bits(IndexReader reader) throws IOException { return super.bits(reader); } }; filter.addFilter(new RangeFilter("publicationDate", String.valueOf(System.currentTimeMillis()-publicationDelay) , String.valueOf(System.currentTimeMillis()), true, true)); if (!functionId.equals("000")) { filter.addFilter(new RangeFilter("functionId", functionId, functionId, true, true)); } if (!typeId.equals("000")) { filter.addFilter(new RangeFilter("typeId", typeId, typeId, true, true)); } filter.addFilter(new RangeFilter("archivingDate","0","0",true,true)); return new CachingWrapperFilter(filter) { private static final long serialVersionUID = 4491361196544402881L; @SuppressWarnings("deprecation") public BitSet bits(IndexReader reader) throws IOException { return super.bits(reader); } }; }
voila , donc en fait, j'ai un tableau de zipCode, et un tableau de TypeId, je lance donc ma requete hibernate avec filtre pour chacun d'eux, et normalement il devrait me recuperer 1 seule ligne en tout mais au lieu de ca , je recupere 21 fois(il y a 21 zipCode) la meme :/
N'etant pas un pro dans l'utilisation d'hibernate filter, si quelqu'un pouvait m'éclairer :b
merci
Partager