【问题标题】:Spring Data REST making range check with QueryDSL bindingSpring Data REST 使用 QueryDSL 绑定进行范围检查
【发布时间】:2018-08-21 14:33:00
【问题描述】:

我有这样的要求:

http://localhost:4000/services/querywithdsl?min=30&max=90

我的域实体仅包含 id :

@Entity
@Data
public class ServiceNumberPorting {

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

还有我的带有谓词的休息控制器

@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>

我想用 querydsl 构建查询,像这样使用绑定

..where id>min and id< max

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

但是,由于我的域不包含 min 和 max 列,因此我无法使用自定义绑定(例如使用 QueryDslBinderCustomizer):

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

如何做到这一点?

这是我浏览过的文档: spring data examples binding examples

【问题讨论】:

  • Here 是一种方法(参见“过滤器之间”)。
  • 您正在使用可能存在于 Profile 实体中的 profile.heightMeters。但是我的实体中不存在 min 和 max 属性。我如何将它们与 id 进行比较?
  • 但是你有 id 属性 - 当你实现这个方法时,你会得到 id 的“介于”30 和 90 之间的过滤器,如下所示:/services/?id=30&amp;id=90
  • @sarah 我的解决方案对你有用吗?
  • 我最终使用了一些 dto 对象将请求字段映射到对象并使用可分页存储库自己创建 dsl 查询。老实说,这并不完全符合我的要求。但我感谢你们的解决方案和时间,从这些答案中学到了新的方法。

标签: java spring spring-data spring-data-jpa spring-data-rest


【解决方案1】:

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

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

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);

}

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

这就是你要找的吗?

【讨论】:

    猜你喜欢
    • 2016-02-17
    • 2020-01-12
    • 2017-10-31
    • 1970-01-01
    • 2020-03-09
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多