java - Spring 数据 : Complicated queries with Specification

标签 java spring spring-data-jpa specifications

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

我的问题是处理像 where ((a & b)|(c & d) & (x)) 这样具有动态输入规范的复杂查询的最佳实践是什么?

最佳答案

如果您想生成动态查询(如果您不知道 or/and 中将有多少元素),最好的解决方案是创建一些用于生成查询的构建器类。例如:SpecificationBuilder来 self 的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")
        )
    );
}   

关于java - Spring 数据 : Complicated queries with Specification,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42607857/

相关文章:

java - 定义线程安全类的两种方式的区别

spring - org.hibernate.LazyInitializationException : could not initialize proxy - no Session | DAO

java - ElasticsearchRepository中的FindAllByColumn(List <String> columnValues)无法正常工作

java - Jpa存储库 : NoSuchBeanDefinitionException

java - Spring Data JPA xml 配置 : "Table not found" with create-drop

java - 使用 Spring 数据/Hibernate 删除 : ORA-01407: Cannot update to Null

java - 为什么 'T.super.toString()' 和 'super::toString' 使用合成访问器方法?

java - 基本 CRUD UI Spring

java - 将创建多少对象以及有多少对象可用于垃圾回收?

java - 数据库连接MySQL;提供数据库名称和用户名/密码就足够了吗?