如何在春季只实现CrudRepository的特定方法?

2022-09-02 13:24:21

我正在使用spring-data-jpa来定义一个实体的接口,然后拥有所有标准的crud方法,而不必明确提供实现,例如:CrudRepository

public interface UserRepo extends CrudRepository<User, Long> {

}

虽然现在我只想在我的自定义实现中重写该方法。我怎样才能做到这一点?因为,如果我实现接口,我必须实现从接口继承的所有其他CRUD方法。save()UserRepoCrudRepository

难道我不能编写自己的实现,其中包含所有CRUD方法,但只重写一个,而不必自己实现所有其他方法吗?


答案 1

你可以做一些非常相似的事情,我相信这将达到你正在寻找的结果。

必要的步骤:

  1. UserRepo现在将扩展 2 个接口:

     public interface UserRepo extends CrudRepository<User, Long>, UserCustomMethods{
    
     }
    
  2. 创建一个名为的新接口(您可以选择名称并在此处和步骤 1 中进行更改)UserCustomMethods

     public interface UserCustomMethods{
         public void mySave(User... users);
    
     }
    
  3. 创建一个名为的新类(这里名称确实很重要,它应该是 RepositoryNameImpl,因为如果你把它叫做别的什么,你需要相应地调整Java/XML配置)。此类应仅实现已创建的 CUSTOM 接口。UserRepoImpl

提示:您可以在此类中为查询注入实体管理器

public class UserRepoImpl implements UserRepo {
    
    //This is my tip, but not a must...
    @PersistenceContext
    private EntityManager em;

    public void mySave(User... users){
        //do what you need here
    }
}
  1. 随时随地注射,享受CRUD和自定义方法:)UserRepo

答案 2

推荐