java - 将条件放入 'OR' 条件的列表中

标签 java hibernate orm hibernate-criteria

我有需要使用Criterion作为条件的要求。此Criterion 将在循环中创建。因此,我将 Criterion 添加到 List 中。在循环之外,我将这些 Criterion 添加到 Criteria 中,并将列表(包含 Criterion)类型转换为 Criterion [] 数组。

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()));  

但这给了我异常(exception)

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lorg.hibernate.criterion.Criterion;  

Criterion添加为而不是放入列表的任何其他解决方案。

最佳答案

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

Criterion[] array = criterions.toArray(new Criterion[criterions.size()]);

查看 toArray() 之间的不同返回类型和 toArray(T[])

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

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

关于java - 将条件放入 'OR' 条件的列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24802680/

相关文章:

java - setimage alapha 在 android 5.1 中不起作用

java - 帮助算法优化

java - 为什么使用 Maven 和 Hibernate 设置一个简单的项目会失败?

c# - LINQ to XML、ORM 或其他 "Completely Different"?

php - 从数据库表构建树类别

.net - 如何使用 NHibernate 模式生成更新数据库表模式?

Java并发: CopyOnWriteArrayList behavior

java - hibernate error java.lang.ClassNotFoundException : javax. persistence.Persistence 是什么意思?

java - 如何级联删除@OneToOne?

java - 使用 Hibernate 时处理架构升级