使用 Spring Data JPA 中的规范实现投影

Implementing Projection with Specification in Spring Data JPA

我正在尝试通过此实现在 Spring Data JPA 中实现具有规范的投影:

https://github.com/pramoth/specification-with-projection

相关类如下:

规格:

public class TopicSpec {
    public static Specification<Topic> idEq(String id){
        return (root, query, cb) -> cb.equal(root.get(Topic_.id),id);
    }
}

存储库

@Repository
    public interface TopicRepository extends JpaRepository<Topic,String>,JpaSpecificationExecutorWithProjection<Topic> {
        public static interface TopicSimple{
            String getId();
            String getName();
    }

        List<TopicSimple> findById(String id);

    }

测试

  @Test
        public void specificationWithProjection() {
            Specification<Topic> where= Specifications.where(TopicSpec.idEq("Bir"));
            List<Topic> all = topicRepository.findAll(where);
            Assertions.assertThat(all).isNotEmpty();
    }

我从 Get 方法得到了这个响应:

但是测试失败了。此外,当我拉取 pramoth 的 github 项目时,我可以 运行 测试成功。有人对这个问题有什么看法吗?

完整的项目可以在这里找到: https://github.com/dengizik/projectionDemo

我向Pramoth Suwanpech 项目的开发人员提出了同样的问题,他很友好地检查了我的代码并给出了答案。我的测试 class 应该像这样实现测试对象:

@Before
public void init() {
    Topic topic = new Topic();
    topic.setId("İki");
    topic.setName("Hello");
    topicRepository.save(topic); }

使用此设置,测试通过。