Skip to content

Support query internal LIKE expressions [DATAJPA-292] #704

Closed
@spring-projects-issues

Description

@spring-projects-issues

Michael Isvy opened DATAJPA-292 and commented

Let us consider the following method:

@Query("SELECT owner FROM Owner owner WHERE owner.lastName LIKE :lastName%")
Collection<Owner> findByLastName(String lastName) throws DataAccessException;

The above code is not supported because, according to JPA, we should have something like this:

entityManager.createQuery("SELECT owner FROM Owner owner WHERE owner.lastName LIKE :lastName")
query.setParam("lastName", lastName + "%")

So the current suggested way in Spring Data is to rely on query generation using the 'StartingWith' suffix:

Collection<Owner> findByLastNameStartingWith(String lastName) throws DataAccessException;

It works, except when we'd like to use a fetch join.
It would be great to have the possibility to do this:

@Query("SELECT owner FROM Owner owner left join fetch owner.pets WHERE owner.lastName LIKE :lastName%")
Collection<Owner> findByLastName(String lastName) throws DataAccessException;

I think the best way to handle it is to add some preprocessing code so Spring Data would first search for "%" characters and add them to the parameter's value (if any)


Referenced from: commits 60c8664, d40c83d, ddd1b9e, 285a994

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions