如何在Spring boot 2.0中实现CrudRepository的自定义方法?

时间:2018-03-19 14:23:34

标签: java spring-mvc spring-boot repository

我可以在早些时候找到这个问题。但答案和文件都不适合我。我关注this doc。

我想在存储库中添加2个自定义界面。我必须在我的代码中做错事。

编译器给出错误:

  

错误:(18,8)java:com.ma.home.service.BuyerPartyDetailsS​​erviceImpl不是抽象的,也不会覆盖org.springframework.data.repository.CrudRepository中的抽象方法deleteAll()。

自定义存储库:

  @Repository
  public interface CustomBuyerPartyDeatilsDAO {
    @Query("SELECT b FROM BuyerPartyDetails buyer WHERE LOWER(buyer.xmlFileName) = fileName")
    public List<BuyerPartyDetails> listByfileName(String fileName);

    @Query("SELECT b FROM BuyerPartyDetails buyer WHERE LOWER(buyer.buyerOrganisationName) = name")
    public BuyerPartyDetails getByBuyerPartyByName(String name);

}

存储库:

  @Repository
  public interface BuyerPartyDetailsDAO2 extends 
CrudRepository<BuyerPartyDetails, Long>, CustomBuyerPartyDeatilsDAO {

    public List<BuyerPartyDetails> listByfileName(String fileName);
    public BuyerPartyDetails getByBuyerPartyByName(String name);
}

服务:

   @Service
   public class BuyerPartyDetailsServiceImpl implements 
 BuyerPartyDetailsDAO2, 
  CustomBuyerPartyDeatilsDAO {


    @Autowired
    private BuyerPartyDetailsDAO2 buyerPartyDetailsDAO2;

    public BuyerPartyDetailsServiceImpl() {

    }

  // more implementation removed.  
 .......
 .......
 }

如果我提供deleteAll()的实施,它会逐一询问所有CrudRepository方法,例如save()saveAll()findById(),{{ 1}}等等。

那么如何使用findAll()已经实现的方法呢?

1 个答案:

答案 0 :(得分:0)

解决此错误

  

com.ma.home.service.BuyerPartyDetailsS​​erviceImpl不是抽象的,并且不会覆盖org.springframework.data.repository.CrudRepository中的抽象方法deleteAll()

您必须覆盖所有抽象方法并为它们提供实现以使其正常运行。

如果您不需要全部实现它们,那么您必须将DAO接口注入服务并让服务实现自己的接口。

Spring将通过提供您应在应用程序上下文中配置的接口的适当实现来完成剩下的工作。