我需要使用Criteria API创建子查询
我创建的当前条件查询是
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这个_,COUNTRY_MASTER国家/地区2_中选择*,PROPERTY_MASTER prop1_,USER_MASTER user6_,ROLE_MASTER角色7_,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这个_,COUNTRY_MASTER国家/地区2_中选择*,PROPERTY_MASTER prop1_,USER_MASTER user6_,ROLE_MASTER角色7_,USER_MASTER user8_,其中(this_.country_id = country2_.country_Id orcountry2_.controller_order在(从中选择zone_idproperty_zone_mapping,其中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 =?
必需部分的粗体部分。Property_zone_mapping是与PropertyDetail.class不相关的另一个表。
我想通过子查询以某种方式使用此表。
提前感谢。
我发现标准查询比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();
}
}