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

时间:2017-10-13 13:06:19

标签: spring-data-jpa projection specifications

我试图通过这个实现在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方法获得此响应:

enter image description here

然而测试失败了。此外,当我拉动pramoth的github项目时,我可以成功运行测试。有没有人对这个问题有任何意见?

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

1 个答案:

答案 0 :(得分:0)

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

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

通过此设置,测试通过。