我想比較一個字符串對錶中的每一列。有沒有更簡單的方法來做到這一點?全文搜索Java規範/謂詞
public class MySpec implements Specification<Tbl> {
private Tbl searchCriteria;
public MySpec(Tbl searchCriteria){
this.searchCriteria = searchCriteria;
}
@Override
public Predicate toPredicate(Root<Tbl> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
List<Predicate> textPredicates = new ArrayList<>();
String searchText = "%" + searchCriteria.getSearchText() + "%";
textPredicates.add(cb.like(root.get("col1"), searchText));
textPredicates.add(cb.like(root.get("col2"), searchText));
textPredicates.add(cb.like(root.get("col3"), searchText));
textPredicates.add(cb.like(root.get("col4"), searchText));
textPredicates.add(cb.like(root.get("col5"), searchText));
textPredicates.add(cb.like(root.get("col6"), searchText));
textPredicates.add(cb.like(root.get("col7"), searchText));
textPredicates.add(cb.like(root.get("col8"), searchText));
textPredicates.add(cb.like(root.get("col9"), searchText));
return query.where(cb.or(textPredicates.toArray(new Predicate[0])
.distinct(true).getRestriction();
}
}
我不希望有我每次一個新列添加到表時更改規格代號。另一個選項是一個單獨的表格,它將在字符串中保存每列的連接版本。如:
TBL
Col1 | Col2 | Col3 | Col4
-----------------------------------------
1 | "Name" | "Value" | "Other Value"
TBL_CACHE
Col1 | Col2
------------------------------
1 | "Name Value OtherValue"
但我不希望爲每個表另一個表我想全文搜索上,我不想填充此數據或創建一個SQL工作做的維護自動。
謝謝。我沒有考慮使用反射來獲取列名。我一直堅持認爲root會有getAll解決方案。這應該很好。 – jDub9