我使用this方法使用规范附带查询参数来生成动态查询。它工作正常。但通过这种方式,我可以使用简单的.and()
或.or()
。
我的问题是,处理带有动态输入规范的where ((a & b)|(c & d) & (x))
等复杂查询的最佳做法是什么?
答案 0 :(得分:0)
如果您想生成动态查询(如果您不知道您或/和中将包含多少元素),那么最佳解决方案是创建一些构建器类以生成查询。例如:来自我的github的SpecificationBuilder。
当你知道你将拥有多少元素时,我建议你使用规范(仅举例):
(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")
)
);
}