2016-07-23 12 views
0

Ich habe ein Attribut "salePointId" in SellingRate Einheit. Jetzt möchte ich ein Kriterium erstellen, dass Objekte mit salePointId in der Liste abruft.Hibernate Kriterien mit einer Gruppe von Bedingungen in OR, ausgewählt aus einer Liste

List<Integer> salePointIds; // some list coming from code above 
    Criteria criteria = session.createCriteria(SellingRate.class) 
      .add(Restrictions.ge("endDate", date)) 
      .add(Restrictions.le("startDate", date)); 
    for (int id: salePointIds) { 
     // what should be written here 
     // to get an OR of restrictions on id 
    } 

Antwort

0

Ich habe es herausgefunden. Restriocion.disjunction() kann dafür verwendet werden.

List<Integer> salePointIds; // some list coming from code above 
Criteria criteria = session.createCriteria(SellingRate.class) 
     .add(Restrictions.ge("endDate", date)) 
     .add(Restrictions.le("startDate", date)); 
Disjunction conditionsInOR = Restrictions.disjunction(); 
for (int id: salePointIds) { 
    conditionsInOR.add(Restrictions.eq("id", id)); 
} 
criteria.add(conditionsInOR); 

Alternative:

Critera criteria = session.createCriteria(SellingRate.class) 
     .add(Restrictions.ge("endDate", date) 
     .add(Restrictions.le("startDate", date) 
     .add(Property.forName("id").in(list.toArray())