I have a Java class which has some field annotated with @SearchCriteria(criteria = "class1.class2.field"). criteria parameter inside annotation means for with class this field should be set as hibernate criteria, it mean that, if field marked for example:
@SearchCriteria(criteria = "class1.class2.field")
private String value;
I want dynamicly create hibernate criteria with looks like
DetachedCriteria hibernateCriteria = forClass(Class.class);
hibernateCriteria.createCriteria("class1").createCriteria("class2").add(eq("field", value));
Problem is than I can not set another criteria to already added, it mean I should check annotation criteria option.
switch (annotationCriteria.length - 1) {
case 0:
hibernateCriteria.add(isNull(annotationCriteria[0]));
case 1:
hibernateCriteria.createCriteria(annotationCriteria[0]).add( Restrictions.isNull(annotationCriteria[annotationCriteria.length - 1]));
case 2: hibernateCriteria.createCriteria(annotationCriteria[0]).createCriteria(annotationCriteria[1]).add( Restrictions.isNull(annotationCriteria[annotationCriteria.length - 1]));
}
I want to remove this “swith”. It is possible to get already added criteria by, I dont now, for example by “name” and that add new subcriteria for it.
I find out more “nice” solution for this issue.
First of all create some searchCriteria class, for example:
And custom annotation:
And in DAO class: