【问题标题】:Convert Spring's Order to JPA Order from Pageable将 Spring 的订单从 Pageable 转换为 JPA 订单
【发布时间】: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


【解决方案1】:

对于这些属性路径,您必须创建连接并使用正确的连接别名和属性路径的最后部分应用 Order

有关更多详细信息,我建议您查看 Spring Data JPA 的代码。 找到对Order 类的所有引用并开始阅读一些代码。

【讨论】:

    【解决方案2】:

    您尝试过使用org.springframework.data.jpa.repository.query.QueryUtils#toOrders 吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      相关资源
      最近更新 更多