Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用动态or语句进行Hibernate critieria查询_Java_Mysql_Hibernate_Criteria - Fatal编程技术网

Java 使用动态or语句进行Hibernate critieria查询

Java 使用动态or语句进行Hibernate critieria查询,java,mysql,hibernate,criteria,Java,Mysql,Hibernate,Criteria,我正在用Hibernate条件编写一个查询。我正在尝试查找与特定位置关联的实体。每个位置可以由国家、省、市、纬度和经度组成。根据使用的字段数量,每个位置将作为不同的对象存储在数据库中。例如,country可以是一个country对象,其中除country外的所有字段都为null;country可以是一个province对象,其中country和province字段已填充,但其他所有字段均为null 当用户登录应用程序时,确定其位置。因此,与用户关联的位置对象的数量将是动态的,这取决于它们的位置。

我正在用Hibernate条件编写一个查询。我正在尝试查找与特定位置关联的实体。每个位置可以由国家、省、市、纬度和经度组成。根据使用的字段数量,每个位置将作为不同的对象存储在数据库中。例如,country可以是一个country对象,其中除country外的所有字段都为null;country可以是一个province对象,其中country和province字段已填充,但其他所有字段均为null

当用户登录应用程序时,确定其位置。因此,与用户关联的位置对象的数量将是动态的,这取决于它们的位置。例如,数据库中可能没有城市的适当位置对象

我已经为与用户关联的位置创建了一个标准。这很好用。。。。下面是示例代码

Criteria locationCriteria = session.createCriteria(Location.class);
        locationCriteria.add(Restrictions.and(
                Restrictions.or(
                        Restrictions.isNull("province"),
                        Restrictions.eq("province", province)
                ),
                Restrictions.or(
                        Restrictions.isNull("country"),
                        Restrictions.eq("country", country)
                )
        ));
还有一个数据库表,其中包含与位置有很多关系的实体。最终,我将尝试查找与登录用户关联的所有位置关联的所有实体。现在的问题是,我需要使用动态大小的location criteria.list作为限制,以获取与每个位置关联的实体。由于列表是动态的,因此我无法对位置使用限制或

我正在考虑对locationCriteria.list中的每个值进行迭代,并为每个实体重新创建查询,但随着数据库规模的增长,我担心性能。然而,我现在已经实现了它,它正在工作,如下所示

for (int i = 0; i < locationCriteria.list().size(); i++) {

            Criteria criteria = session.createCriteria(Entity.class);

            criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
            criteria.createAlias("locations", "locations");
            Location l = (Location) locationCriteria.list().get(i);

            criteria.add(Restrictions.eq("locations.id", l.getId()));
            criteria.add(Restrictions.eq(availability, true));
            criteria.add(Restrictions.eq("active", true));
            try {
                criteria.add(Restrictions.or(
                        Restrictions.isNull("startDate"),
                        Restrictions.le("startDate", dateFormat.parse(dateFormat.format(date)))
                ));
            } catch (ParseException p) {
                p.printStackTrace();
            }

            try {
                criteria.add(Restrictions.or(
                        Restrictions.isNull("endDate"),
                        Restrictions.ge("endDate", dateFormat.parse(dateFormat.format(date)))
                ));
            } catch (ParseException p) {
                p.printStackTrace();
            }

            for (Object ob : criteria.list()) {
                Entity entity = (Entity) ob;
                EntityModel pm = new EntityModel(entity);
                entityModels.add(pm);
            }
        }
我该怎么办?我不想遍历每个位置的整个数据库,但我找不到一种方法来处理or语句中的动态值量