Jsf 对JPA关系实体列表进行排序
我使用PrimeFaces在数据表中显示信息。datatable中的数据实际上是由OpenJPA生成的实体对象列表。这些实体与其他实体有关系。这意味着列表中有列表 例如,一个名为Authors的实体,它有许多书籍。数据列表列在数据表中。为了对列表进行排序,我使用Collections.sort,当我试图对作者的书名进行排序时,它当然不起作用。因为title字段是Book类的一个实例 当有这样的关系时,我该如何对列表进行排序Jsf 对JPA关系实体列表进行排序,jsf,jpa,primefaces,openjpa,Jsf,Jpa,Primefaces,Openjpa,我使用PrimeFaces在数据表中显示信息。datatable中的数据实际上是由OpenJPA生成的实体对象列表。这些实体与其他实体有关系。这意味着列表中有列表 例如,一个名为Authors的实体,它有许多书籍。数据列表列在数据表中。为了对列表进行排序,我使用Collections.sort,当我试图对作者的书名进行排序时,它当然不起作用。因为title字段是Book类的一个实例 当有这样的关系时,我该如何对列表进行排序 提前感谢。以下是按书名排序的示例,您需要对图书列表进行排序: publ
提前感谢。以下是按书名排序的示例,您需要对图书列表进行排序:
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);
}
请参阅教程,其中使用@OrderBy注释。效果很好。非常感谢。
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;
}
}
public class Book {
private String title;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@Override
public String toString() {
return "Book [title=" + title + "]";
}
}