当前位置: 首页 > 知识库问答 >
问题:

使用QueryDSL绑定进行范围检查

朱越
2023-03-14

我有这样的要求:

http://localhost:4000/services/querywithdsl?min=30

我的域实体仅包含id:

@Entity
@Data
public class ServiceNumberPorting {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(updatable = false, nullable = false)
    private Long id;
}

和我的Rest控制器与谓词

@GetMapping(value = "/services/querywithdsl")
    public ResponseEntity<List<ServiceNumberPortingMapper>>getServiceNumberPortingWithDsl(@QuerydslPredicate(root = ServiceNumberPorting.class) Predicate predicate) {
        ...

    }

存储库:

public interface ServiceNumberPortingRepository extends JpaRepository<ServiceNumberPorting, Long>,QuerydslPredicateExecutor<ServiceNumberPorting>,    QuerydslBinderCustomizer<QServiceNumberPorting>

我想用querydslhtml" target="_blank">构建查询,就像这个使用绑定的查询

..where id>min and id< max

我找到的所有示例都是将查询参数直接映射到实体列,但在这个示例中,我的实体中只有一个id,我想对传入的参数值进行范围检查,这些参数值的名称与实体列的名称不同。

然而,由于我的域不包含min和max列,所以我无法让它与定制绑定一起工作,比如使用QueryDslBinderCustomizer:

bindings.bind(store.city).single((path, value) -> path.endsWith(value));

如何做到这一点?

以下是我浏览过的文档:spring数据示例和绑定示例

共有1个答案

欧阳鸿哲
2023-03-14

我能想到的解决方案之一是:

在您的存储库中,我定义了一个方法getValueLyingOf并编写了一个简单的查询:

public interface ServiceNumberPortingRepository extends JpaRepository...{
    @Query("SELECT m FROM <YOUR_TABLE_NAME> m where ( m.id >=:min and m.id <= :max )")
    public ServiceNumberPorting getValueLyingBetween(@Param("min") String min, @Param("max") String max);

}

然后,您可以简单地从控制器中使用最小值和最大值调用此存储库方法。

这是你要找的吗?

 类似资料:
  • 使用DynamoDB,没有简单的方法可以对列执行索引范围查询。主键、本地二级索引和全局二级索引都需要分区键来进行范围查询。 例如,假设我有一个带有数字分数属性的高分表。使用索引范围查询无法获得前10名或前25至50名 那么,执行这项极其常见的任务的惯用方式或首选方式是什么呢? > 接受表格扫描。 使用静态分区键并利用分区查询。 使用固定数量的静态分区键并使用多个分区查询。

  • 为了更好地掌握AngularJS,我决定使用其中的一个示例,特别是简单地在Todo-example中添加一个“完整”的屏幕,当用户输入了5个todo,它使用一个switch-case切换到另一个div。代码可以在http://jsfiddle.net/fwchu/1/,如果有用的话。 但是,似乎每个switch-case都有自己的作用域($scope.todotext不可用),但是在本例中,可以从

  • 问题内容: 为了掌握AngularJS,我决定使用其中一个示例,特别是在Todo示例中简单地添加一个“ complete”屏幕,当用户输入5个todo时,它会使用一个切换案例切换到另一个div。 。如果有任何用处,可以在这里找到代码http://jsfiddle.net/FWCHU/1/。 但是,似乎每个开关盒都有其自己的作用域($ scope.todoText不可用),但是在这种情况下,可以使用

  • 原因:java.lang.annotation.annotationFormaterror:无效默认值:public abstract java.lang.class org.springframework.data.jpa.repository.config.enableJParepositories.repositoryBaseClass()

  • 问题内容: 我的意思是除了在功能,类需要时(如果同时切换,尝试捕获)时使用它以外。 在看到这样的问题之前,我不知道可以这样做。 在上面的链接中,Eli提到“他们使用它在逻辑部分中折叠他们的代码,这些逻辑部分通常不属于通常会被折叠的函数,类,循环等。” 除上述用途外,还有哪些其他用途? 使用大括号限制变量的范围并仅在需要时才扩展范围是一个好主意吗(在“需要访问”的基础上进行)?还是真的很傻? 如何使

  • 关于Lucene,我非常喜欢的一点是查询语言,在这里我(应用程序用户)可以编写动态查询。我通过 但这不适用于像这样的范围查询: 另一方面,通过API它可以工作(但我放弃了将查询用作输入的便捷方式): 这是查询解析器中的一个错误,还是我遗漏了一个要点,比如QueryParser接受的是词法值而不是数值?我如何在不使用查询API但解析字符串的情况下实现这一点? 这个问题是这个问题的后续问题,指出了问题