我正在將 Spring Tool Suite 4 (4.12.0.RELEASE) 與 Java 8 一起使用,我有以下代碼可以從過濾、分頁和排序的表中獲取結果:
// Define pageable
Sort sort = JpaSort.unsafe(Sort.Direction.ASC, Arrays.asList("FIELD(Status, '0','6','1','3','7')"));
Pageable pageRequest = PageRequest.of(searchCriteria.getPageNo(), searchCriteria.getPageSize(), sort);
// Initialise specification
Specification<BestPracticeAdminList> spec = Specification.where(null);
// If search criteria contains searchText field, add it to the specification
if(searchCriteria.getSearchText() != null)
spec = spec.and(BestPracticeAdminListFilter.titleLike(searchCriteria.getSearchText()));
// If search criteria contains filters field, inspect filters field
if(searchCriteria.getFilters() != null) {
// If search criteria contains subjectID field, add it to the specification
if(searchCriteria.getFilters().getSubjectID() != null)
spec = spec.and(BestPracticeAdminListFilter.hasAlternativeSubjectID(searchCriteria.getFilters().getSubjectID()));
// If search criteria contains categoryID field, add it to the specification
if(searchCriteria.getFilters().getCategoryID() != null)
spec = spec.and(BestPracticeAdminListFilter.hasAlternativeSubjectCategoryID(searchCriteria.getFilters().getCategoryID()));
// If search criteria contains status field, add it to the specification
if(searchCriteria.getFilters().getStatus() != null)
spec = spec.and(BestPracticeAdminListFilter.hasStatus(searchCriteria.getFilters().getStatus()));
}
// Get results
Page<BestPracticeAdminList> pagedResults = bestPracticeAdminListRepository.findAll(spec, pageRequest);
問題是添加自定義排序。我需要按狀態欄位排序,它是一個列舉器,但按特定順序排序,而不是撰寫列舉器的順序。
在使用 @Query 和 nativeQuery=true 的存盤庫上使用本機查詢時,自定義排序在不同的情況下作業,但在這種情況下,當我想使用帶有過濾規范的 findAll 方法時,自定義排序不適用。
這是物體類:
@Entity
@Table
public class BestPracticeAdminList implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "BestPracticeAdminListID")
private int bestPracticeAdminListID;
@Column(name = "Title")
private String title;
@Column(name = "BestPracticeID")
private int bestPracticeID;
@Column(name = "AlternativeSubjectID")
private int alternativeSubjectID;
@Column(name = "AlternativeSubjectCategoryID")
private int alternativeSubjectCategoryID;
@Column(name = "Status")
@Enumerated(EnumType.ORDINAL)
private LookupReportingProvisionWorkflowStatus status;
@Column(name = "IsPreviousVersionPublished")
private Boolean isPreviousVersionPublished;
public BestPracticeAdminList() {
}
目前,我得到的例外是:
org.springframework.data.mapping.PropertyReferenceException: No property fIELD(Status, '0','6','1','3','7') found for type BestPracticeAdminList!
我怎么能解決這個問題?謝謝
uj5u.com熱心網友回復:
由于 Spring 抱怨您沒有排序欄位,您可以通過使用FIELDa@Formula中的函式創建它來解決此問題BestPracticeAdminList
@Formula("FIELD(Status, '0','6','1','3','7')")
private String sortingStatus;
并使用它進行排序
Sort sort = JpaSort.unsafe(Sort.Direction.ASC, Arrays.asList("sortingStatus"));
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/351240.html
上一篇:是否可以總結一組物件的屬性并根據另一個屬性對其進行過濾?
下一篇:sorted是重復條目
