假设有两个实体类Book和Author,它们之间是多对多的关系,并且在中间表Book_Author中有一个@OrderColumn字段order_num用于记录书籍和作者之间的顺序关系。现在需要按order_num字段对查询结果进行排序。
实体类Book:
@Entity public class Book { @Id private Long id; private String title;
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(name = "Book_Author",
joinColumns = @JoinColumn(name = "book_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "author_id", referencedColumnName = "id"))
@OrderColumn(name = "order_num")
private List authors = new ArrayList<>();
// 省略getter和setter方法
}
实体类Author:
@Entity public class Author { @Id private Long id; private String name;
@ManyToMany(mappedBy = "authors", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List books = new ArrayList<>();
// 省略getter和setter方法
}
查询并按照order_num字段排序:
@Repository
public interface BookRepository extends JpaRepository
List findAllByAuthorsOrderByAuthorsOrderNumAsc(Author author);
}
在BookRepository中定义一个方法findAllByAuthorsOrderByAuthorsOrderNumAsc,它接受一个Author类型的参数author,并返回一个按照order_num字段升序排列的Book列表。在方法名字中,OrderBy关键字表示按照属性进行排序,后面跟着属性名OrderNum和排序方式Asc表示按照order_num字段进行升序排列。
运行方法:
@Autowired private BookRepository bookRepository;
@Test public void testFindAllByAuthorsOrderByAuthorsOrderNumAsc() { Author author = new Author(); author.setId(1L);
List books = bookRepository.findAllByAuthorsOrderByAuthorsOrderNumAsc(author);
for (Book book : books) {
System.out.println(book.getTitle());
}
}
通过调用findAll
上一篇:按两周为单位求和和分组工资
下一篇:按连接表中匹配实例的数量排序