2017-03-05 65 views
1

我使用this方法使用規範帶查詢參數生成動態查詢。它工作正常。但通過這種方式,我可以使用簡單的.and().or()彈簧數據:複雜的查詢與規範

我的問題是什麼是處理複雜查詢如where ((a & b)|(c & d) & (x))具有動態輸入規範的最佳做法是什麼?

回答

0

如果你想生成動態查詢(如果你不知道你有多少元素在你或/和)爲最佳的解決方案是創建一些生成器類生成的查詢。例如:SpecificationBuilder從我的github。

當你知道你有多少元素都有,我建議你使用像(例如只)規格:

(root, query, builder) -> { 
    return builder.and(
     builder.equal(root.get("id"), "1"), 
     builder.equal(root.get("name"), "name"), 
     builder.or(
      builder.equal(root.get("id"), "2"), 
      builder.equal(root.get("name"), "enam") 
     ) 
    ); 
}