【发布时间】:2019-07-13 01:08:31
【问题描述】:
我们的前端旨在发送带有 Spring 的 Order 的 Pageable 对象,其中包含属性名称。
示例实体:
@Entity
@Table
public class Foo {
private String userName;
@Embedded
private Bar bar;
}
@Embeddable
public class Bar {
private String value;
}
我们在存储库中接收带有订单的可分页,并从该可分页对象解析 JPA 的订单,如下所示:
pageable.getSort().get().forEach(springOrder ->
jpaOrders.add(getBuilder().asc(root.get(springOrder .getProperty())))
);
我们需要这样做,因为我们是通过条件 api 构建查询。
当我们收到 Foo 的存储库属性时,一切都很好,例如“用户名”。但是当我们收到可嵌入实体的属性时,例如"bar.value" 我们得到了异常
无法在此 ManagedType 上找到具有给定名称 [bar.value] 的属性
你能告诉我如何从定义可嵌入实体的属性的属性创建 JPA 的 Order 对象吗?谢谢指教
【问题讨论】:
-
为什么必须“解析”Pageable?您应该能够将其直接传递到存储库。你实现了 PagingAndSortingRepository docs.spring.io/spring-data/commons/docs/current/api/org/…
-
@AlanHay 我也添加了质疑的理由。我们有高级查询,因此我们为它们使用标准 api。
-
考虑规范模式(使用 Criteria API 或 QuerDsl 作为(IMO,更简单的)替代方案)。请参阅 JpaSpecificationExecutor
和 QueryDslPredictaeExecutor ,它们具有获取规范/谓词和 Pageable 的方法。 spring.io/blog/2011/04/26/… -
@AlanHay 由于一些问题,我们从 querydsl 切换。不过谢谢你的建议。
标签: jpa spring-data-jpa spring-data jpa-2.0 jpa-2.1