2015-07-29 16 views
0

Мне нужно создать подзапрос, используя критерии APIСоздать подзапрос в критерии запроса

ток Критерии запроса, который я создал это

Criteria propCriteria = session.createCriteria(PropertyDetail.class); 
      propCriteria.createAlias("property","prop"); 
      propCriteria.createAlias("country", "country"); 
propCriteria.add(Restrictions.eq("prop.propertyId",promotionFormBean.getPropertyId())); 

SQL-производства Hibernate является

выберите * from 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_ где (this_.country_id = country2_.country_Id или country2_.controller_order в (выбрать zone_id из property_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.

Я хочу как-то использовать эту таблицу, используя подзапрос.

Заранее спасибо.

ответ

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(); 
    } 
}