在 Spring 中实施 CrudRepository。我应该遵循的最佳设计是什么?

Implementing CrudRepository in Spring. What's the best design I should follow?

我从 CrudRepository 扩展了用户存储库,如下所示

public interface UserRepository extends CrudRepository<User, Long>, DatatablesCriteriasRepository<User> 

DatatablesCriteriasRepository有个功能需要针对不同的仓库单独实现

所以我创建了这样的存储库实现 class。在 impl 包中。

public class UserRepositoryImpl implements DatatablesCriteriasRepository<User> 

请注意,这只是为了实现DatatablesCriteriasRepository中的功能。我不想覆盖框架在 CrudRepository 中提供的默认功能。

但如果我这样做,它会更适合代码设计,因为 UserRepositoryImpl 实际上实现了 UserRepository,顾名思义。

public class UserRepositoryImpl implements UserRepository 

但这又会迫使我扩展 UserRepository 接口中的所有功能。顺便说一下如何在好的代码设计中解决这个问题?

UserRepositoryImpl 在实现 DatatablesCriteriasRepository 时可以使用这个名称吗?

Spring's repositories custom implementations 文档提供了实现此方法的方法,正如@JBNizet 向我指出的那样。

文档摘录如下

自定义存储库功能的接口

interface UserRepositoryCustom {
  public void someCustomMethod(User user);
}

自定义存储库功能的实现

class UserRepositoryImpl implements UserRepositoryCustom {

  public void someCustomMethod(User user) {
    // Your custom implementation
  }
}

对基本存储库界面的更改

interface UserRepository extends CrudRepository<User, Long>, UserRepositoryCustom {

  // Declare query methods here
}