【问题标题】:Spring boot overiding save Method in JpaRepository interfaceJpaRepository 接口中的 Spring Boot 覆盖保存方法
【发布时间】:2018-02-23 17:16:14
【问题描述】:

我正在尝试创建一个通用抽象存储库类来处理所有继承我的 BaseModel 类并覆盖保存行为的 sql 模型。

@Repository
public abstract class GenericRepository implements JpaRepository<BaseModel, Long> {
    @Override
    public <S extends BaseModel> S save(S baseModel) {
        long timeStamp = System.currentTimeMillis();
        if (baseModel.createdTimeStamp == 0) {
            baseModel.createdTimeStamp = timeStamp;
            baseModel.updatedTimeStamp = timeStamp;
        } else {
            baseModel.updatedTimeStamp = timeStamp;
        }
        super.save(baseModel);
        return baseModel;
    }
}

然后像这样在我的任何控制器中自动装配这个类:

 @Autowired
    GenericRepository genericRepository;

但是,当我运行我的 spring boot 应用程序时,我得到以下信息:

Field genericRepository in com.spring.springboot.rest.example.student.StudentResource required a bean of type 'com.spring.springboot.rest.example.student.GenericRepository' that could not be found.


Action:

Consider defining a bean of type 'com.spring.springboot.rest.example.student.GenericRepository' in your configuration.

【问题讨论】:

    标签: spring-boot repository spring-data-jpa


    【解决方案1】:

    首先为你的通用仓库创建一个接口:

    @NoRepositoryBean
    public interface GenericRepository<T extends BaseModel, Long> extends JpaRepository<T, Long> {}
    

    然后创建你的实现:

    public class GenericRepositoryImpl<T extends BaseModel> extends SimpleJpaRepository<T, Long> implements GenericRepository<T, Long> {
    
        @Override
        public <S extends T> S save(S baseModel) {
            long timeStamp = System.currentTimeMillis();
            if (baseModel.createdTimeStamp == 0) {
                baseModel.createdTimeStamp = timeStamp;
                baseModel.updatedTimeStamp = timeStamp;
            } else {
                baseModel.updatedTimeStamp = timeStamp;
            }
            save(baseModel);
            return baseModel;
        }
    }
    

    最后,告诉 Spring 将其用作存储库的基类。在您的配置中的某处..

    @Configuration
    @EnableJpaRepositories(repositoryBaseClass = GenericRepositoryImpl.class)
    

    那么你可以这样使用它:

    public interface MyEntityRepository extends GenericRepository<MyEntity> {}
    

    一些豆子:

    @Autowired
    private MyEntityRepository myEntityRepository;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2018-06-25
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      相关资源
      最近更新 更多