我们想要在所有存储库中使用一些常用方法(例如API level 26+
(spring boot 2.0方法签名已更改),因此我们在基础存储库中添加此方法,并且我们还需要一些自定义方法特定于存储库,因此也实现了基础和自定义)
应用程序类:
fineOne
现在
@EnableMongoRepositories(basePackages ={"com.kairos.activity.persistence.repository"},
repositoryBaseClass = MongoBaseRepositoryImpl.class)
public class KairosActivityApplication
@NoRepositoryBean
public interface MongoBaseRepository<T, ID extends Serializable> extends MongoRepository<T, ID> {
T findOne(ID id);
}
public class MongoBaseRepositoryImpl<T, ID extends Serializable>
extends SimpleMongoRepository<T, ID> implements MongoBaseRepository<T, ID> {
private final MongoOperations mongoOperations;
private final MongoEntityInformation<T, ID> entityInformation;
public MongoBaseRepositoryImpl(MongoEntityInformation<T, ID> entityInformation,
MongoOperations mongoOperations) {
super(entityInformation, mongoOperations);
// Keep the EntityManager around to used from the newly introduced methods.
this.mongoOperations = mongoOperations;
this.entityInformation=entityInformation;
}
@Override
public T findOne(ID id) {
Assert.notNull(id, "The given id must not be null!");
return mongoOperations.findById(id, entityInformation.getJavaType(), entityInformation.getCollectionName());
}
}
存储库特定的自定义存储库不使用其方法对待主存储库的常规方法并给出解析错误
@Repository
public interface ActivityMongoRepository extends MongoBaseRepository<Activity, BigInteger>,CustomActivityMongoRepository {
@Query(value="{staffId:?0,unitId:?3,disabled:false,startDate:{$gte:?1},endDate:{$lte:?2}}")
List<ActivityQueryResult> findAllActivityBetweenDuration(Long staffIf, Date startDate, Date endDate,Long unitId);
Long countByActivityTypeId(BigInteger activityTypeId);
}
public interface CustomActivityMongoRepository {
void updatePhasesOfActivities(Long orgId, Date startDateInISO, Date endDateInISO, String phaseName, String PhaseDescription);
}
应该有效,但我认为当我们实现基本自定义存储库(存储库特定的自定义实现被忽略)时