我正在构建一个spring boot crud应用程序,必须在其中搜索,添加和删除客户。我将项目合规性更改为Java 8。
我正在关注本教程https://www.callicoder.com/hibernate-spring-boot-jpa-one-to-many-mapping-example/
@RequestMapping(value = "/customers/{custId}", method = RequestMethod.DELETE)
public ResponseEntity<?> deleteCust(@PathVariable int custId) {
Customer cust=cRep.findOne(custId);
return cust.map(cust1 -> {
cRep.delete(cust1);
return ResponseEntity.ok().build();
}).orElseThrow(() -> new ResourceNotFoundException("custId " + custId + " not found"));
}
但是我遇到以下错误: 尚未为客户类型定义方法map((cust1)-> {})。请您帮帮我吗?
答案 0 :(得分:0)
如果您已经知道ID,则不应使用findOne(int)
。 findOne
返回对目标对象的引用,不再返回Optional<T>
。这就是为什么您不能使用map()
使用findById
,它肯定会返回一个Òptional<T>
,然后可以将其映射。
@RequestMapping(value = "/customers/{custId}", method = RequestMethod.DELETE)
public ResponseEntity<?> deleteCust(@PathVariable int custId) {
return cRep.findById(custId)
.map(cust1 -> {cRep.delete(cust1); return ResponseEntity.ok().build();})
.orElseThrow(() -> new ResourceNotFoundException("custId " + custId + " not found"));
}
答案 1 :(得分:0)
您的客户变量具有Customer类的类型。例外是告诉您Customer类具有map方法。您可以尝试使用Optional.ofNullable(cRep.findById(custId)).map(...).orElseThrow(...)