Java 将标准放入'的列表中;或';条件

Java 将标准放入'的列表中;或';条件,java,hibernate,orm,hibernate-criteria,Java,Hibernate,Orm,Hibernate Criteria,我有一个要求,即我需要为或条件使用标准。此标准将在循环中创建。因此,我将标准添加到列表中。在循环之外,我将这些标准添加到标准中,并将列表(其中包含标准)键入标准[]数组 List<Criterion> criterions = new ArrayList<Criterion>(); for (XYZ xyz : xyzs) { Integer[] age = findMinAndMaxAgeXYZ(xyz);

我有一个要求,即我需要为
条件使用
标准。此
标准将在循环中创建。因此,我将
标准添加到
列表中
。在循环之外,我将这些
标准
添加到
标准
中,并将列表(其中包含
标准
)键入
标准[]
数组

List<Criterion> criterions = new ArrayList<Criterion>();
        for (XYZ xyz : xyzs) {

            Integer[] age = findMinAndMaxAgeXYZ(xyz);

            Date minAge = prepareDateByAge(age[0]);
            Date maxAge = prepareDateByAge(age[1]);
            // Ordering has been changed to fetch the records for 
            // between condition.
            criterions.add(Restrictions.between("dob", maxAge, minAge));
        }
        criteria.add(Restrictions.or((Criterion[]) criterions.toArray()));  
标准添加为
而不是放入列表的任何其他解决方案。

toArray()
返回一个对象数组。您需要的是一系列标准。因此,正确的方法是:

Criterion[] array = criterions.toArray(new Criterion[criterions.size()]);
请参见和之间的不同返回类型

注意,在这种情况下,简单地使用析取会容易得多:

Disjunction disjunction = Restrictions.disjunction();
for (XYZ xyz : xyzs) {
    ...
    disjunction.add(Restrictions.between("dob", maxAge, minAge));
}
criteria.add(disjunction);
toArray()
返回一个对象数组。您需要的是一系列标准。因此,正确的方法是:

Criterion[] array = criterions.toArray(new Criterion[criterions.size()]);
请参见和之间的不同返回类型

注意,在这种情况下,简单地使用析取会容易得多:

Disjunction disjunction = Restrictions.disjunction();
for (XYZ xyz : xyzs) {
    ...
    disjunction.add(Restrictions.between("dob", maxAge, minAge));
}
criteria.add(disjunction);
toArray()
返回一个对象数组。您需要的是一系列标准。因此,正确的方法是:

Criterion[] array = criterions.toArray(new Criterion[criterions.size()]);
请参见和之间的不同返回类型

注意,在这种情况下,简单地使用析取会容易得多:

Disjunction disjunction = Restrictions.disjunction();
for (XYZ xyz : xyzs) {
    ...
    disjunction.add(Restrictions.between("dob", maxAge, minAge));
}
criteria.add(disjunction);
toArray()
返回一个对象数组。您需要的是一系列标准。因此,正确的方法是:

Criterion[] array = criterions.toArray(new Criterion[criterions.size()]);
请参见和之间的不同返回类型

注意,在这种情况下,简单地使用析取会容易得多:

Disjunction disjunction = Restrictions.disjunction();
for (XYZ xyz : xyzs) {
    ...
    disjunction.add(Restrictions.between("dob", maxAge, minAge));
}
criteria.add(disjunction);