java - Spring 数据 JPA。查找方式

标签 java spring spring-data spring-data-jpa jpql

我的 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/

相关文章:

java - Postgresql 和 GlassFish - 启用自动提交时无法提交

Java CompletableFuture.anyOf(manyfutures).thenRun( runnable ) 只运行一次

java - Spring MVC Controller 没有返回正确的 View

java - 使应用层松散耦合

spring-data - 延迟加载 Spring Data JPA 存储库

java - json jackson异常 map 序列化

java - 如何在 Spring 事务中获取连接?

java - 如何通过 @Id 使用 CrudRepository 进行批量删除?

spring-data-jpa - 如何在Spring Data Jpa中找到前N个元素?

java - 使用 Maven 如何仅使用一个不同的 .java 文件构建 Java 项目的两个版本?