【发布时间】: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