Leo*_*nel 6 java spring mongodb spring-data spring-data-mongodb
环境:
spring-data-mongo:1.7.0.RC1
mongo-java-driver:3.2.2
文献:
@Document(collection = "products")
public class Product {
@Id
private String sid;
private String name;
private Long vendor;
(...)
}
Run Code Online (Sandbox Code Playgroud)
库:
public interface ProductRepository extends MongoRepository<Product, String> {
Product findByName(String productName);
}
Run Code Online (Sandbox Code Playgroud)
我的目标是拦截对Product集合执行的任何查询,并添加谓词或规范,而无需修改存储库或需要实现方法findByNameAndBelongsToVendorList.
我需要这个拦截器或aspectJ,因为我有多个方法,如:
Page<Product> findAll(Pageable page);
List<Product> findByCategory(String category, Pageable pageRequest);
(...)
Run Code Online (Sandbox Code Playgroud)
目标
findByName // perform a filter by name (explicit)
// and a filter by vendor (injected via inteceptor or aspecJ)
Run Code Online (Sandbox Code Playgroud)
避免这样做
@Repository
public class ProductRepositoryCustomImpl implements ProductRepositoryCustom {
@Autowired
private MongoTemplate template;
public Product findByNameAndBelongsToVendorList(String name, List<Long> vendors, Pageable pageRequest) {
Criteria criteriaVendor = Criteria.where("vendors").in(vendors);
Query query = new Query(criteriaVendor);
query.with(pageRequest);
return template.findOne(query, Product.class);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 0
方面应该能解决问题。
@Aspect
public class YourAspect {
@Autowired
private MongoTemplate template;
@Pointcut("execution(public * findByName(..))")
private void findByName() {
}
@Pointcut("within(com.leonel.repository.ProductRepository)")
private void repository() {
}
@Around("repository() && findByName()")
public Object doAround(ProceedingJoinPoint pjp) throws Throwable {
Object[] args = pjp.getArgs();
String name = (String) args[0];
Criteria newCriteria = YOUR NEW LOGIC HERE;
Query query = new Query(newCriteria);
return template.find(query, Your.class);
}
Run Code Online (Sandbox Code Playgroud)
不过,我建议不要这样做,因为它给您的代码带来了一些魔力,并且操作查询不应该是方面的问题。您希望避免在存储库中使用多个查找方法的原因是什么?
归档时间: |
|
查看次数: |
1463 次 |
最近记录: |