【问题标题】:Does it auto construct queries它是否自动构建查询
【发布时间】:2019-01-01 06:03:03
【问题描述】:

我的端到端流程如下所示: 控制器 -> 适配器 -> 持久性/存储库 -> 数据库

在我的控制器中:

@RequestMapping(value = "/userOrder/{orderID}", method = RequestMethod.DELETE)
   public Set<?> deleteOrder(@PathVariable("orderID") String orderID) {
   /*
    * orderHandlerAdapter cancels the order and passed list of orders created + cancelled so  * far.
    */
    Set<Orders> orderList = orderHandlerAdapter.cancelOrder(orderID);
    return orderList;
   }

在适配器中:

public Set<Order> cancelOrder(String orderID) {
/*
 * Cancel order first.
 */
    userOrderRepository.saveOrder(orderID,"CANCELLED");
/*
 * Return list of orders created and cancelled so far.
 */
    Set<Order> orderList = userOrderRepository.getFirstByOrderIdAndStatusCdIsIn(orderID, new Set<String> {"CREATED","CANCELLED"});
    return Set<Order>;
}

坚持:

    public interface orderRespository extends CrudRepository<UserOrder,String>() {
/*
 * Save status = CANCELLED into the DB.
 */
    void saveOrder(String orderID);
    /*
     * Get orders that are created and cancelled.
     */
    Set<Order> getFirstByOrderIdAndStatusCdIsIn(String orderID, new Set<String> orderStatusSet); 
    }

我发现调用 saveOrder/getFirstByOrderIdAndStatusCdIsIn 时,查询没有在任何地方定义,接口也没有实现。但是结果是正确返回的。

这是如何工作的? JPA 是否足够智能以根据方法名称创建查询?

【问题讨论】:

  • 仅供参考,XXXRepository 和这些关联的方法名称与“JPA API”完全无关。那就是 Spring Data JPA。建议你上网搜索
  • 谢谢,会看的。
  • 相关:using Spring DATA to implement DAO。这是对 spring data jpa 的非常简短的高级描述,其中包括对这个问题的回答。

标签: spring spring-data-jpa crud jpql


【解决方案1】:

Spring Data 对产品中包含的存储库(CrudRepositoryPagingAndSortingRepositoryJpaRepositoryQueryByExampleExecutor)中的方法有一个默认实现。你可以在SimpleJpaRepository找到很多。

但这不仅仅是将SimpleJpaRepository 的实例添加到ApplicationContext。相反,使用了代理。代理检查被调用的方法并决定如何提供实现:

  1. 它是预定义的方法 -> 调用它的实现
  2. 它是否有 @Query 注释或其名称是否与命名查询匹配 -> 调用它
  3. 能否将其名称转换为查询 -> 这样做。

除此之外,Spring Data 还负责查询结果与方法所需返回类型之间的转换。

【讨论】:

    猜你喜欢
    • 2019-02-17
    • 2017-10-11
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2016-12-25
    • 2015-05-23
    相关资源
    最近更新 更多