Java 使用QueryDSL绑定进行Spring数据REST范围检查
我有这样的要求: 我的域实体仅由id组成:Java 使用QueryDSL绑定进行Spring数据REST范围检查,java,spring,spring-data,spring-data-jpa,spring-data-rest,Java,Spring,Spring Data,Spring Data Jpa,Spring Data Rest,我有这样的要求: 我的域实体仅由id组成: @Entity @Data public class ServiceNumberPorting { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(updatable = false, nullable = false) private Long id; } 还有我的rest控制器和谓词 @GetMapping(value = "/servic
@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) {
...
}
如何做到这一点
以下是我看过的文件:
我能想到的解决方案之一是: 在您的存储库中,我定义了一个方法
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);
}
公共接口服务NumberPortingRepository扩展了JpaRepository{
@查询(“从m中选择m,其中(m.id>=:min和m.id是一种方法(请参见“过滤器之间”)。您正在使用profile.heightMeters,它可能存在于profile实体中。但我的实体中不存在min和max属性。我如何将它们与id进行比较?但是您有属性id
-当您实施此方法时,您将获得id
的“介于”30和90之间的过滤器,如下所示:/services/?id=30&id=90
@sarah did我的解决方案对你有用吗?我最终使用一些dto对象将请求字段映射到对象,并使用pageable repository自己创建dsl查询。老实说,这不是我想要的。但我感谢你们提供的解决方案和你们的时间,从这些答案中学到了新的方法。
..where id>min and id< max
bindings.bind(store.city).single((path, value) -> path.endsWith(value));
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);
}