# Hibernate - Expression.or



## Cole (5. Nov 2008)

Hi,
ich habe ein Problem:
Ich habe in einem Vector mehrere DetachedCriterias gesammelt. Diese gesammelten DetachedCriterias möchte ich OR verknüpfen und anschliessend eine (neue) DetachedCriteria mit den OR verknüpften einzelnen Criterias zurückgeben.
Mit Expression.or kann ich aber nur 2 Criterias verknüpfen, wie stelle ich es an, dass auch mehrere gehen?


----------



## SlaterB (5. Nov 2008)

Criterion c1 = null;
Criterion c2 = null;
Criterion c3 = null;

Criterion c1OrC2 = Expression.or(c1,c2);
Criterion c1OrC2OrC3 = Expression.or(c1OrC2,c3);


----------



## Cole (5. Nov 2008)

sehe grad, dass Expression.or 2 Criterions verlangt, aber keine DetachedCriterias. Was kann ich tun? Ich bekomme DetachedCriterias...


----------



## SlaterB (5. Nov 2008)

das ist doch egal, DetachedCriterias wird doch wohl ein Criterion sein,
ansonsten kannst du es überhaupt nicht an Expression.or übergeben,

also reden wir nur über Criterions und dann funktioniert der obige Code (abgesehen von den null-Werten..),
egal welche Art von Criterions du verwendest,


edit: oder auch nicht, aber dann hat das Problem zumindest nix mehr mit den drei ORs zu tun, wenn schon nichtmal ein OR geht


----------



## Cole (5. Nov 2008)

Nein, das hat dann nix mit den ORs zu tun  Hab es jetzt erstmal so umgeändert, dass ich keine DetachedCriterias bekomme, sonder Criterions. Dadurch funktioniert auch Expression.or.
Da ich nicht weiss, wieviele Criterions ich bekomme hab ich es mal so gemacht:


```
Criterion[] dcs = vec.toArray(new Criterion[0]);
		DetachedCriteria subCriteria = DetachedCriteria.forClass(dcs[0].getClass());
		for (int i = 0; i < dcs.length-1; i++){
			Criterion dc1 = dcs[i];
			Criterion dc2 = dcs[i+1];
			subCriteria.add(Expression.or(dc1, dc2));
		}
		System.out.println(subCriteria);
```


----------

