2013-08-29 152 views
1

我要Restriction.or添加到我的标准休眠“或”限制

我做

Criterion displayName   = Restrictions.ilike("displayName", search, MatchMode.ANYWHERE); 
      Criterion lastUpdatedName  = Restrictions.ilike("lu.displayName", search, MatchMode.ANYWHERE); 
      Criterion tagTokenVarText  = Restrictions.ilike("tvtext.value", search, MatchMode.ANYWHERE); 
      Criterion tagTokenMultiText = Restrictions.ilike("tmtText.value", search, MatchMode.ANYWHERE); 
      Criterion tagTokenSiteVar  = Restrictions.ilike("ttSiteVar.displayName", search, MatchMode.ANYWHERE); 
      Criterion tagMultiTokenSiteVar = Restrictions.ilike("tmtSiteVar.displayName", search, MatchMode.ANYWHERE); 

     Criterion or1 = Restrictions.or(displayName, lastUpdatedName); 
     Criterion or2 = Restrictions.or(tagTokenVarText, tagTokenMultiText); 
     Criterion or3 = Restrictions.or(tagTokenSiteVar, tagMultiTokenSiteVar); 
     Criterion or4 = Restrictions.or(or1, or2); 
     criteria.add(Restrictions.or(or4, or3)); 

,但我不喜欢创建标准或者1的这种方式,OR 2 ...

我所有的变量(displayName .... tagMultiTokenSiteVar)都应该是OR。我可以将它添加到列表或其他东西吗?

回答

4

使用Disjunction

Criteria crit = session.createCriteria(YourClass.class); 
Disjunction disjunction = Restrictions.disjunction(); 
disjunction.add(Restrictions.ilike("lu.displayName", search, MatchMode.ANYWHERE)); 
// ...add others restrictions... 
crit.add(disjunction); 
+0

哇,谢谢。正是我需要的。 why criteria.setProjection(Projections.groupProperty(“displayName”));什么都不做?我需要不同的记录具有相同的显示名称 – antohoho

+0

有一个明确的标准http://stackoverflow.com/questions/10731723/how-to-add-distinct-in-hibernate-criteria –