2012-12-18 19 views
7

Chcę utworzyć specyfikację, która pasuje do identyfikatora grupy obiektu użytkownika do listy identyfikatorów. Myślałem o użyciu isMember (jak w kodzie), ale metoda nie zajmie listy.Kryteria API JPA - Dopasowanie do listy w Spring Data Specyfikacje JPA

public static Specification<User> matchCompanyIdsList(final List<Long> groupIds){ 
    return new Specification<User>() { 
    public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder){ 
     final Path<Group> group = root.<Group> get("group"); 
     return builder.isMember(company.<Long>get("id"), companyIds); 
    } 
    }; 
} 

jeśli nie, to jak bym to zrobił inaczej?

Odpowiedz

17

Czy chcesz utworzyć specyfikację, która pasuje do wszystkich użytkowników, którzy mają identyfikator grupy, którzy znajdują się na liście groupsIds?

Jeśli tak, można użyć coś takiego (który będzie używać SQL w klauzuli):

public static Specification<User> matchCompanyIdsList(final List<Long> groupIds){ 
    return new Specification<User>() { 
     public Predicate toPredicate(Root<User> root, CriteriaQuery<?> query, CriteriaBuilder builder){ 
      final Path<Group> group = root.<Group> get("group"); 
      return group.in(groupIds); 
     } 
    }; 
} 
Powiązane problemy