Spring Data:带有规范的复杂查询

时间:2017-03-05 11:31:40

标签: java spring spring-data-jpa specifications

我使用this方法使用规范附带查询参数来生成动态查询。它工作正常。但通过这种方式,我可以使用简单的.and().or()

我的问题是,处理带有动态输入规范的where ((a & b)|(c & d) & (x))等复杂查询的最佳做法是什么?

1 个答案:

答案 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")
        )
    );
}