我想在存储库接口中有一个简单的JPA方法,可以将N定义为参数:
List<Messages> findTopCountByStatusEquals(int count, String status);
那是行不通的,我只能使用预定义的最高人数:
List<Messages> findTop10ByStatusEquals(String status);
是否可以将Top count作为运行时参数?
答案 0 :(得分:1)
根据Spring Data JPA doc,无法按照您的描述进行操作,但是您可以使用Pageable作为参数而不是int来获得结果
@Repository
public interface MessageRepository{
List<Messages> findByStatusEquals(Pageable pageable, String status);
}
然后为您服务:
@Transactional(readOnly = true)
@Override
public Page<Messages> findByStatusEquals(String status) {
Pageable pageRequest = createPageRequest()
return this.messagesRepository.findByStatusEquals(pageRequest, searchResultPage);
}
private Pageable createPageRequest() {
return new PageRequest(0, 10);
}
您当然也可以根据需要应用排序:
private Pageable createPageRequest() {
return new PageRequest(0,
10,
new Sort(Sort.Direction.DESC, "messageBody")
.and(new Sort(Sort.Direction.ASC, "someOtherField"));
);
}
答案 1 :(得分:0)
如果使用java8,则可以在存储库界面中采用这种更好的方法。
List<Messages> findByStatus(String status, Pageable pageable);
default List<Messages> findTopCountByStatusEquals(int count, String status) {
return findByStatus(status, PageRequest.of(0, count));
}
此方法使用java8的默认方法来完全匹配您想要的内容。