DATAJPA-424 - Fixed alias detection in manually defined queries using SpEL.
ExpressionBasedStringQuery now resolves and evaluates SpEL expressions of the actual query in the constructor and passes the resolved query to the StringQuery constructor. This enables the alias detection mechanism to work properly. Original pull request: #51
This commit is contained in:
committed by
Oliver Gierke
parent
9a279f83cf
commit
23e27f3332
@@ -23,6 +23,9 @@ import java.util.List;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.domain.sample.ConcreteType1;
|
||||
import org.springframework.data.jpa.domain.sample.ConcreteType2;
|
||||
import org.springframework.data.jpa.repository.sample.ConcreteRepository1;
|
||||
@@ -61,4 +64,19 @@ public class MappedTypeRepositoryIntegrationTests {
|
||||
assertThat(concretes1.size(), is(1));
|
||||
assertThat(concretes2.size(), is(1));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAJPA-424
|
||||
*/
|
||||
@Test
|
||||
public void supportForPaginationCustomQueryMethodsWithEntityExpression() {
|
||||
|
||||
concreteRepository1.save(new ConcreteType1("foo"));
|
||||
concreteRepository2.save(new ConcreteType2("foo"));
|
||||
|
||||
Page<ConcreteType2> page = concreteRepository2.findByAttribute1Custom("foo", new PageRequest(0, 10,
|
||||
Sort.Direction.DESC, "attribute1"));
|
||||
|
||||
assertThat(page.getNumberOfElements(), is(1));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,4 +48,18 @@ public class ExpressionBasedStringQueryUnitTests {
|
||||
StringQuery query = new ExpressionBasedStringQuery(source, metadata);
|
||||
assertThat(query.getQueryString(), is("select from User u where u.firstname like :firstname"));
|
||||
}
|
||||
|
||||
/**
|
||||
* @DATAJPA-424
|
||||
*/
|
||||
@Test
|
||||
public void renderAliasInExpressionQueryCorrectly() {
|
||||
|
||||
when(metadata.getEntityName()).thenReturn("User");
|
||||
|
||||
StringQuery query = new ExpressionBasedStringQuery("select u from #{#entityName} u", metadata);
|
||||
assertThat(query.getAlias(), is("u"));
|
||||
assertThat(query.getQueryString(), is("select u from User u"));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,9 +18,12 @@ package org.springframework.data.jpa.repository.sample;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.jpa.domain.sample.AbstractMappedType;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.data.repository.query.Param;
|
||||
|
||||
/**
|
||||
* @author Thomas Darimont
|
||||
@@ -30,4 +33,7 @@ public interface MappedTypeRepository<T extends AbstractMappedType> extends JpaR
|
||||
|
||||
@Query("from #{#entityName} t where t.attribute1=?1")
|
||||
List<T> findAllByAttribute1(String attribute1);
|
||||
|
||||
@Query("SELECT o FROM #{#entityName} o where o.attribute1=:attribute1")
|
||||
Page<T> findByAttribute1Custom(@Param("attribute1") String attribute1, Pageable pageable);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user