Can you send a Query object as parameter to a SpringData Repository method?

Viewed 44

I was reading this link about Spring Data JPA and it got me curious: Instead of using @Query annotation, can you create a query and then use it as a param to the method?

More like this:

@Repository
public interface MyRepository extends CrudRepository<MyClass, Integer>
{
    void doSomething(Query query);
}

(BTW, I know I could implement a fragment repository and solve my problem, but I'm curious)

1 Answers

you could not create an implementation class, instead of that you can write interface methods like this:

@Entity
public class Part {

    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    private Long id;

    @Column(unique = true)
    private String partId;

    public Part() {

    }

    public Part(String partId) {
        this.partId = partId;
    }

    public String getPartId() {
        return partId;
    }

    public void setPartId(String partId) {
        this.partId = partId;
    }

    public Set<Card> getCards() {
        return cards;
    }

}


public interface PartRepository extends CrudRepository<Part, Long> {

    public Optional<Part> findByPartId(String partId);
    
    public List<Part> findAllByPartId(String partId);
}

Spring automatically convert these lines to SQL in background, you should don't care about that.

You can find some details here: https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods

Related