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