Search code examples
spring-data-jpaprojectionspecifications

Implementing Projection with Specification in Spring Data JPA


I am trying to implement the projection with specification in Spring Data JPA via this implementation:

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

Related classes are as follows:

Spec:

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

Repository

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

        List<TopicSimple> findById(String id);

    }

Test

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

I have this response from the Get method:

enter image description here

However the tests fail. Besides when I pull the github project of pramoth I can run the tests with success. Does anyone have any opinion about this issue?

The full project can be found here: https://github.com/dengizik/projectionDemo


Solution

  • I have asked the same question to the developer of the project Pramoth Suwanpech, who was kind enough to check my code and give answer. My test class should've implement the test object like this:

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

    With this setting the tests passed.