Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 对JPA关系实体列表进行排序_Jsf_Jpa_Primefaces_Openjpa - Fatal编程技术网

Jsf 对JPA关系实体列表进行排序

Jsf 对JPA关系实体列表进行排序,jsf,jpa,primefaces,openjpa,Jsf,Jpa,Primefaces,Openjpa,我使用PrimeFaces在数据表中显示信息。datatable中的数据实际上是由OpenJPA生成的实体对象列表。这些实体与其他实体有关系。这意味着列表中有列表 例如,一个名为Authors的实体,它有许多书籍。数据列表列在数据表中。为了对列表进行排序,我使用Collections.sort,当我试图对作者的书名进行排序时,它当然不起作用。因为title字段是Book类的一个实例 当有这样的关系时,我该如何对列表进行排序 提前感谢。以下是按书名排序的示例,您需要对图书列表进行排序: publ

我使用PrimeFaces在数据表中显示信息。datatable中的数据实际上是由OpenJPA生成的实体对象列表。这些实体与其他实体有关系。这意味着列表中有列表

例如,一个名为Authors的实体,它有许多书籍。数据列表列在数据表中。为了对列表进行排序,我使用Collections.sort,当我试图对作者的书名进行排序时,它当然不起作用。因为title字段是Book类的一个实例

当有这样的关系时,我该如何对列表进行排序


提前感谢。

以下是按书名排序的示例,您需要对图书列表进行排序:

 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 + "]";
}
}