【发布时间】:2015-07-29 15:16:38
【问题描述】:
我需要使用 Criteria API 创建子查询
我创建的当前 Criteria 查询是
Criteria propCriteria = session.createCriteria(PropertyDetail.class);
propCriteria.createAlias("property","prop");
propCriteria.createAlias("country", "country");
propCriteria.add(Restrictions.eq("prop.propertyId",promotionFormBean.getPropertyId()));
Hibernate产生的SQL是
从 PROPERTY_DETAILS this_、COUNTRY_MASTER country2_ 中选择 *, PROPERTY_MASTER prop1_, USER_MASTER user6_, ROLE_MASTER role7_, USER_MASTER user8_ 其中 this_.country_id=country2_.country_Id 和 this_.property_id=prop1_.PROPERTY_ID 和 prop1_.archive_user_id=user6_.id(+) 和 user6_.role_id=role7_.ROLE_ID(+) 和 prop1_.create_user_id=user8_.id(+) 和 prop1_.PROPERTY_ID=?。
我需要做的是使用标准生成以下 SQL
- 必填:
从 PROPERTY_DETAILS this_、COUNTRY_MASTER country2_ 中选择 *, PROPERTY_MASTER prop1_, USER_MASTER user6_, ROLE_MASTER role7_, USER_MASTER user8_ where (this_.country_id=country2_.country_Id 或 country2_.controller_order in (select zone_id from property_zone_mapping where property_id=?)) 和 this_.property_id=prop1_.PROPERTY_ID 和 prop1_.archive_user_id=user6_.id(+) 和 user6_.role_id=role7_.ROLE_ID(+) 和 prop1_.create_user_id=user8_.id(+) 和 prop1_.PROPERTY_ID=?
Required section.Property_zone_mapping的粗体部分是另一个与PropertyDetail.class无关的表。
我想通过子查询以某种方式使用这个表。
提前致谢。
【问题讨论】:
-
对于
this_.country_id=country2_.country_Id,这个join部分是由hibernate生成的,改成需要的自定义join子句并不容易。请改用 HQL 或 SQL 查询。如果您还想使用子查询,请为相关实体添加详细信息(模式,关联),看看是否可以将查询重构为使用子查询。
标签: java hibernate criteria hibernate-criteria