Środowisko:sprężyną danych MongoDB zapytanie przecięcia i wstrzykiwać orzeczenie lub specyfikacji
sprężyny danych Mongo: 1.7.0.RC1
Mongo-Java kierowcy: 3.2.2
dokumentu
@Document(collection = "products")
public class Product {
@Id
private String sid;
private String name;
private Long vendor;
(...)
}
repozytorium :
public interface ProductRepository extends MongoRepository<Product, String> {
Product findByName(String productName);
}
Moje goa Mam przechwycić każde zapytanie wykonane w kolekcji Product i dodać predykat lub specyfikację bez modyfikowania repozytorium lub potrzeby wdrożenia metody findByNameAndBelongsToVendorList.
muszę to przechwytujących lub AspectJ bo mam wiele metod, takich jak:
Page<Product> findAll(Pageable page);
List<Product> findByCategory(String category, Pageable pageRequest);
(...)
Cel
findByName // perform a filter by name (explicit)
// and a filter by vendor (injected via inteceptor or aspecJ)
unikać robienia tego
@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);
}
}
Obecnie używam 2 frameworki ... SpringData e MongoTemplate. Z MongoTemplate mogę używać pointcut na * org.springframework.data.mongodb.core * i przechwytywać wszystkie metody takie jak findAll, findOne ... ale z SpringData nie wiem jeszcze jak to zrobić. – Leonel