2014-11-29 1 views
1

태그에는 값이 "#tylkoclara"인 필드 이름을 가진 태그가 들어 있습니다. 첫 번째 경우 결과에서 는 결과를콜렉션이있는 최대 절전 모드

SessionFactory sf = HibernateUtil.getSessionFactory(); 
     Session session = sf.openSession(); 
     session.beginTransaction(); 
     List<Tag> results = new ArrayList<Tag>(); 
     Criteria criteria = session.createCriteria(Tag.class); 
     criteria.add(Restrictions.eq("name", "#tylkoclara")); 
     results = criteria.list();I 

예상되는 크기 1을 가지고하지만 기준으로 전체 모음을 사용하려고하면, 결과의 크기는 내가 왜

일이 일어나고 아무 생각이없는 0

public static List<Tag> filterTags(List<Tag> tags) { 
     SessionFactory sf = HibernateUtil.getSessionFactory(); 
     Session session = sf.openSession(); 
     session.beginTransaction(); 
     Criteria criteria = session.createCriteria(Tag.class); 
     List<Tag> results = new ArrayList<Tag>(); 
     for(Tag tag : tags) { 
      criteria.add(Restrictions.eq("name", tag.getName())); 
     } 
     results = criteria.list(); 

입니다

답변

1

이와 같은 루프에 제한을 추가하면 OR 조건 대신 AND 조건이 작성됩니다. 태그에는 여러 개의 다른 이름이 없으므로 0 개의 결과가 반환됩니다.

public List<Tag> filterTags(List<Tag> tags) { 
    Criteria criteria = session.createCriteria(Tag.class); 
    Disjunction disjunction = Restrictions.disjunction(); 

    for (Tag tag : tags) { 
     disjunction.add(Restrictions.eq("name", tag.getName())); 
    } 
    criteria.add(disjunction); 
    return criteria.list(); 
} 
:

당신은 (내가 예를 짧게 유지하는 세션 생성을 다루는 코드 등의 부분을 생략 한)이 같은 예를 들어, 조건을 만들거나 필요