Spring 数据 REST、MVC QueryDSL 绑定 |模拟默认绑定
Spring Data REST, MVC QueryDSL bindings | simulate default bindings
我有启用了 Spring 数据 REST 的 Web 应用程序,遇到了 Querydsl web support
我还定义了存储库如下:
public interface OrderRepository extends PagingAndSortingRepository<Order, Long>,
QueryDslPredicateExecutor<Order> {}
和订单实体:
@Entity
@Table
public class Order extends AbstractEntity {
private final Location location;
private final LocalDateTime orderedDate;
private Status status;
@OrderColumn
@Column(unique = true)
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private final List<LineItem> lineItems = new ArrayList<>();
public enum Status {
PAYMENT_EXPECTED,
PAID,
PREPARING,
READY,
TAKEN;
}
}
文档指出:
The default binding is as follows:
Object on simple properties as eq.
Object on collection like properties as contains.
Collection on simple properties as in.
如果我想模拟第一次绑定,我可以发出例如
curl -i -X GET -H "Content-Type:application/json"
http://localhost:8080/api/orders?status=READY
然后服务器端将请求参数转换为querydsl谓词order.status = READY
我很难理解另外 2 个案例。
请求参数应该如何创建正确的谓词?
第二种类型的示例是:
http://localhost:8080/api/orders?status=PAID&status=READY
这类似于 JPQL in 子句。给我所有状态为 PAID 或 READY
的订单
第三种类型的示例是:
http://localhost:8080/api/orders?lineItems=http://localhost:8080/api/lineItems/1
这类似于 JPQL contains 子句。给我所有 lineItems 包含指定对象的订单(资源的唯一 URI 指定为请求参数)。
我有启用了 Spring 数据 REST 的 Web 应用程序,遇到了 Querydsl web support
我还定义了存储库如下:
public interface OrderRepository extends PagingAndSortingRepository<Order, Long>,
QueryDslPredicateExecutor<Order> {}
和订单实体:
@Entity
@Table
public class Order extends AbstractEntity {
private final Location location;
private final LocalDateTime orderedDate;
private Status status;
@OrderColumn
@Column(unique = true)
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private final List<LineItem> lineItems = new ArrayList<>();
public enum Status {
PAYMENT_EXPECTED,
PAID,
PREPARING,
READY,
TAKEN;
}
}
文档指出:
The default binding is as follows:
Object on simple properties as eq.
Object on collection like properties as contains.
Collection on simple properties as in.
如果我想模拟第一次绑定,我可以发出例如
curl -i -X GET -H "Content-Type:application/json"
http://localhost:8080/api/orders?status=READY
然后服务器端将请求参数转换为querydsl谓词order.status = READY
我很难理解另外 2 个案例。
请求参数应该如何创建正确的谓词?
第二种类型的示例是:
http://localhost:8080/api/orders?status=PAID&status=READY
这类似于 JPQL in 子句。给我所有状态为 PAID 或 READY
的订单第三种类型的示例是:
http://localhost:8080/api/orders?lineItems=http://localhost:8080/api/lineItems/1
这类似于 JPQL contains 子句。给我所有 lineItems 包含指定对象的订单(资源的唯一 URI 指定为请求参数)。