【问题标题】:Same query method and parameters with different return in Spring DataSpring Data中相同的查询方法和参数具有不同的返回
【发布时间】:2016-04-11 12:09:15
【问题描述】:

我想使用投影来为相同的查询返回更少的元素。

Page<Network> findByIdIn(List<Long> ids);
Page<NetworkSimple> findByIdIn(List<Long> ids);

由于查询是使用方法的名称创建的,我必须使用哪些选项来执行相同的查询但使用不同的名称?

【问题讨论】:

  • Spring Data 通过方法查询是按约定构造的,您不能更改名称但仍期望相同的行为。您是否愿意使用不依赖于方法名称的 @Query 注释,或者可能使用 JPAQuery 实现自定义 DAO。 S
  • @vine 是的,我可以使用 Query 注释,并且可能应该是解决此问题的最佳解决方案。谢谢。
  • 将创建一个答案供您接受。

标签: spring jpa spring-data spring-data-jpa


【解决方案1】:

我今天遇到了这个问题,接受的答案实际上是不正确的;您可以在不改变行为的情况下更改方法名称。根据 Spring Data 文档:

find(或其他引入关键字)和 By 之间的任何文本都被认为是描述性的,除非使用限制结果的关键字之一,例如 Distinct 在要创建的查询上设置不同的标志或 Top/First 来限制查询结果。

因此,您可以有一个名为 findByIdIn 的方法和另一个名为 findNetworkSimpleByIdIn 的方法,两者将返回相同的数据(根据定义的返回类型,可选择转换为不同的形式)。

【讨论】:

    【解决方案2】:

    Spring Data 通过方法查询是按约定构造的,您不能更改名称但仍期望相同的行为。

    您可以尝试使用不依赖于方法名称的@Query 注释,或者可能使用 JPAQuery 和 FactoryExpression 实现自定义 DAO,其效果与投影相同。

    【讨论】:

      猜你喜欢
      • 2013-07-27
      • 1970-01-01
      • 2018-11-14
      • 2016-09-01
      • 2019-05-25
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多