Dear all , I have two available two detachedCriteria as below
Code:
public Class CriteriaFactory
{
public static DetachedCriteria getAgeAbove20Cri()
{
DetachedCriteria ageAbove20Cri = DetachedCriteria.forClass( Student.class )
.add(Restrictions.gt("age" , 20 ) );
return ageAbove20Cri ;
}
public static DetachedCriteria getAgeBelow10Cri()
{
DetachedCriteria ageBelow10Cri = DetachedCriteria.forClass( Student.class )
.add(Restrictions.lt("age" , 10 ) );
return ageBelow10Cri;
}
}
Now I want to reuse these two detachedCriteria to get the student that age above 20 or age below 10.
My current way is
Code:
DetachedCriteria ageAbove20Cri = CriteriaFactory.getAgeAbove20Cri()
DetachedCriteria ageBelow10Cri = CriteriaFactory.getAgeBelow10Cri()
List ageAbove20StudentList = ageAbove20Cri.getExecutableCriteria( session ).list();
List ageBelow10StudentList = ageBelow10Cri .getExecutableCriteria( session ).list();
List studentList = new ArrayList();
studentList.addAll(ageAbove20StudentList );
studentList.addAll(ageBelow10StudentList );
The code will use two separate sql to get the student data
( 1.get student age above 20 , 2. get student age below 10).
I want to let hibernate use one sql to get the data
(student age above 20 or student age below 10).
But the code can't work, because the parameter type of Restrictions.or is Criterion.
Code:
this.session.createCriteria( Student.class )
.add( Restrictions.or( ageAbove20Cri, ageBelow10Cri ) ).list();
I want to reuse the available detachedCriteria.
Can somebody teach me how to combine two availabe detachedCriteria with logical operators?
Thanks