我需要使用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_ where 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 from 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 =?
必需section.Property_zone_mapping的粗体部分是另一个与PropertyDetail.class无关的表。
我想以某种方式使用子查询来使用此表。
提前致谢。
答案 0 :(得分:0)
我发现条件查询比HQL更难阅读。你考虑过NamedQuery吗?
@NamedQueries({
@NamedQuery(
name="PropertyDetail.findByPropertyId",
query="from PropertyDetail join property p join country c where p.propertyId = :propertyId"
)
})
public class PropertyDetail {
...
}
public class PropertyDetailDao {
public List<PropertyDetail> findByPropertyId(long propertyId) {
Query query = getSession().getNamedQuery("PropertyDetail.findByPropertyId");
query.setParameter("propertyId", propertyId);
return query.list();
}
}