在条件查询中创建子查询

问题描述 投票:0回答:1

我需要使用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不相关的另一个表。

我想通过子查询以某种方式使用此表。

提前感谢。

java hibernate criteria hibernate-criteria
1个回答
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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.