Как реализовать только специальный метод CrudRepository в Spring?

Я использую CrudRepository из spring -data-jpa, чтобы просто определить интерфейс объекта и затем иметь все стандартные методы crud без необходимости явно предоставлять реализацию, например:

public interface UserRepo extends CrudRepository<User, Long> {

}

Хотя теперь я хотел бы переопределить только метод save() в моей пользовательской реализации. Как я мог это достичь? Потому что, если я реализую интерфейс UserRepo, мне придется реализовать все другие методы CRUD, которые наследуются от интерфейса CrudRepository.

Не могу ли я написать свою собственную реализацию, которая имеет все методы CRUD, но переопределяет только одну, не выполняя все остальные?

Ответ 1

Вы можете сделать что-то довольно похожее, которое, как я полагаю, будет достигнет результата, который вы ищете.

НЕОБХОДИМЫЕ ШАГИ:

1) UserRepo теперь будет расширять 2 интерфейса:

public interface UserRepo extends CrudRepository<User, Long>, UserCustomMethods{

}

2) Создайте новый интерфейс с именем UserCustomMethods (вы можете выбрать имя и изменить как здесь, так и на шаге 1)

public interface UserCustomMethods{
    public void mySave(User... users);

}

3) создайте новый класс с именем UserRepoImpl (здесь имя делает, и оно должно быть RepositoryName Impl), потому что, если вы называете это чем-то другим, вы будете необходимо соответствующим образом настроить конфигурацию Java/XML). этот класс должен реализовать только созданный CUSTOM интерфейс.

СОВЕТ: вы можете добавить entitymanager в этот класс для своих запросов

public class UserRepoImpl implements UserCustomMethods{

    //This is my tip, but not a must...
    @PersistenceContext
    private EntityManager em;

    public void mySave(User... users){
        //do what you need here
    }
}

4) Внесите UserRepo везде, где вам нужно, и наслаждайтесь как CRUD, так и своими пользовательскими методами:)