我的 spring 项目中有一个常用的 Spring Data JPA 存储库。
@Repository
public interface EventRepository extends CrudRepository<Event, Long> {
List<Event> findByOriginalIdIn(Collection<String> originalEventIds);
...
我之前使用方法 findByOriginalIdIn
它运行良好。但是情况发生了变化,我需要使用成对集合来查找和过滤正确的事件来处理相同的请求。
我的替代方法应该处理下一个逻辑:
通过 (originalId1 AND originalCalendarId1) OR (originalId2 AND originalCalendarId2) OR (originalId..N AND originalCalendarId..N) OR 查找
是否可以使用 Selectively exposing CRUD methods 处理这个请求? ?如果是,我可以举个例子吗?
最佳答案
为了不创建自定义存储库,我建议使用 Spring Data JPA 规范。 这是一个草稿示例。
class Specification1 implements Specification<Event> {
private final List<Pair<String, String>> pairs;
public Specification1(List<Pair<String, String>> pairs) {
this.paris = pairs;
}
@Override
public Predicate toPredicate(Root<Event> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Predicate[] as = pairs.stream().map(pair -> {
return cb.and(cb.equal(root.get("originalId2"), pair.getKey())),cb.equal(root.get("originalCalendarId2"), pair.getKey());
}).toArray(Predicate[]::new);
return cb.or(as);
}
}
userRepository.findAll(new Specification1(...));
此外,您的存储库必须扩展 JpaSpecificationExecutor。
关于java - Spring 数据 JPA。查找方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44387013/