2011-01-08 3 views
0

У меня есть базовый тип, где «бизнес-идентификатор» должен быть уникальным для данного подкласса, но там могут быть разные подклассы с одним и тем же идентификатором бизнеса.polymorphic hql

Если есть базовый тип с запрошенным id, но с неправильным подклассом, я хочу вернуть значение null, используя именованный запрос. Код ниже делает это, но мне интересно, могу ли я избежать try/catch с лучшим HQL. Могу я?

Приветствия,
Berryl

тока HQL

<query name="FindActivitySubjectByBusinessId"> 
<![CDATA[ 
      from ActivitySubject act 
      where act.BusinessId = :businessId 
]]> 

</query> 

тока выборки код

public ActivitySubject FindByBusinessId<T>(string businessId) where T : ActivitySubject 
    { 
     Check.RequireStringValue(businessId, "businessId"); 
     try { 
      return _session.GetNamedQuery("FindActivitySubjectByBusinessId") 
       .SetString("businessId", businessId) 
       .UniqueResult<T>(); 
     } 
     catch (InvalidCastException e) { 
      // an Activity Subject was found with the requested id but the wrong type 
      return null; 
     } 
    } 

ответ