2014-09-18 2 views
0

Я использую PrimeFaces для отображения информации в DataTable. Данные в datatable фактически представляют собой список объектов сущностей, которые генерируются OpenJPA. И сущности имеют отношения к другим сущностям. Это означает, что есть списки внутри списков.Сортировка реляционных сущностей JPA

Например, объект, называемый Авторы, который имеет много Книги. Данные List<Authors> перечислены в формате данных. И для сортировки List я использую Collections.sort(), который, конечно, не работает, когда я пытаюсь сортировать по названию книги авторов. Поскольку поле заголовка является экземпляром класса Book.

Как мне сортировать списки, когда есть такие отношения?

Заранее спасибо.

+0

см. [Это] (http://www.java2s.com/Tutorial/Java/0355__JPA/OneToManyWithO rderBySetting.htm), в котором используется аннотация @OrderBy. – Xstian

ответ

0

Вот пример сортировки по названию книги, вам нужно отсортировать список книг:

public static void main(String args[]) { 
      List<Author> list = new ArrayList<Author>(); 

      for (int i=0;i<5;i++){ 
       Author a = new Author(); 
       a.setName("author"+i); 
       List<Book> books = new ArrayList<Book>(); 
       for(int j=0;j<4;j++){ 
    Random r = new Random(); 
    char c = (char) (r.nextInt(26) + 'a'); 
       Book b = new Book(); 
       b.setTitle(c+"title"); 
       books.add(b); 
       } 

       a.setBooks(books); 
       list.add(a); 
      } 

/* 
     * At this point of time you have Authors list which you want to sort by book title. 
     * So you can do something like below if you want to do it through Collections.sort 
     */ 

for(Author a : list){ 
       Collections.sort(a.getBooks(), new Comparator<Book>(){ 

        @Override 
        public int compare(Book o1, Book o2) { 
       return o1.getTitle().compareToIgnoreCase(o2.getTitle()); 

        }}); 

      } 
      System.out.println(list); 


     } 

Автор и книги, используемые в приведенном выше примере:

import java.util.List; 

public class Author { 
private List<Book> books; 
private String name; 
@Override 
public String toString() { 
    return "Author [books=" + books + ", name=" + name + "]"; 
} 
public List<Book> getBooks() { 
    return books; 
} 
public void setBooks(List<Book> books) { 
    this.books = books; 
} 
public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
} 

Book.java:

+0

Работает как шарм. Спасибо! – amofasser

Смежные вопросы