Skip to content

Commit f3361eb

Browse files
committed
Polishing.
Formatting. Added a test. Original pull request #2023 See #2008
1 parent 2176936 commit f3361eb

File tree

2 files changed

+27
-7
lines changed

2 files changed

+27
-7
lines changed

spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQuery.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@
7373
public class StringBasedJdbcQuery extends AbstractJdbcQuery {
7474

7575
private static final String PARAMETER_NEEDS_TO_BE_NAMED = "For queries with named parameters you need to provide names for method parameters; Use @Param for query method parameters, or use the javac flag -parameters";
76-
private final static String LOCKING_IS_NOT_SUPPORTED = "Currently, @Lock is supported only on derived queries. In other words, for queries created with @Query, the locking condition specified with @Lock does nothing. Offending method: ";
76+
private static final String LOCKING_IS_NOT_SUPPORTED = "Currently, @Lock is supported only on derived queries. In other words, for queries created with @Query, the locking condition specified with @Lock does nothing. Offending method: ";
7777
private final JdbcConverter converter;
7878
private final RowMapperFactory rowMapperFactory;
7979
private final ValueExpressionQueryRewriter.ParsedQuery parsedQuery;
@@ -457,6 +457,7 @@ public boolean requiresRowMapper() {
457457

458458
@Nullable
459459
static <T> Constructor<T> findPrimaryConstructor(Class<T> clazz) {
460+
460461
try {
461462
return clazz.getDeclaredConstructor();
462463
} catch (NoSuchMethodException ex) {

spring-data-jdbc/src/test/java/org/springframework/data/jdbc/repository/query/StringBasedJdbcQueryUnitTests.java

+25-6
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@
5353
import org.springframework.data.jdbc.support.JdbcUtil;
5454
import org.springframework.data.projection.SpelAwareProxyProjectionFactory;
5555
import org.springframework.data.relational.core.mapping.RelationalMappingContext;
56+
import org.springframework.data.relational.core.sql.LockMode;
57+
import org.springframework.data.relational.repository.Lock;
5658
import org.springframework.data.repository.Repository;
5759
import org.springframework.data.repository.core.support.DefaultRepositoryMetadata;
5860
import org.springframework.data.repository.core.support.PropertiesBasedNamedQueries;
@@ -252,7 +254,7 @@ void sliceQueryNotSupported() {
252254
JdbcQueryMethod queryMethod = createMethod("sliceAll", Pageable.class);
253255

254256
assertThatThrownBy(
255-
() -> new StringBasedJdbcQuery(queryMethod, operations, result -> defaultRowMapper, converter, delegate))
257+
() -> new StringBasedJdbcQuery(queryMethod, operations, result -> defaultRowMapper, converter, delegate))
256258
.isInstanceOf(UnsupportedOperationException.class)
257259
.hasMessageContaining("Slice queries are not supported using string-based queries");
258260
}
@@ -278,6 +280,16 @@ void limitNotSupported() {
278280
.isInstanceOf(UnsupportedOperationException.class);
279281
}
280282

283+
@Test // GH-2023
284+
void lockNotSupported() {
285+
286+
JdbcQueryMethod queryMethod = createMethod("unsupportedWithLock", Long.class);
287+
288+
assertThatThrownBy(
289+
() -> new StringBasedJdbcQuery(queryMethod, operations, result -> defaultRowMapper, converter, delegate))
290+
.isInstanceOf(UnsupportedOperationException.class);
291+
}
292+
281293
@Test // GH-1212
282294
void convertsEnumCollectionParameterIntoStringCollectionParameter() {
283295

@@ -355,10 +367,12 @@ void spelCanBeUsedInsideQueries() {
355367
List<EvaluationContextExtension> list = new ArrayList<>();
356368
list.add(new MyEvaluationContextProvider());
357369

358-
QueryMethodValueEvaluationContextAccessor accessor = new QueryMethodValueEvaluationContextAccessor(new StandardEnvironment(), list);
370+
QueryMethodValueEvaluationContextAccessor accessor = new QueryMethodValueEvaluationContextAccessor(
371+
new StandardEnvironment(), list);
359372
this.delegate = new ValueExpressionDelegate(accessor, ValueExpressionParser.create());
360373

361-
StringBasedJdbcQuery sut = new StringBasedJdbcQuery(queryMethod, operations, result -> defaultRowMapper, converter, delegate);
374+
StringBasedJdbcQuery sut = new StringBasedJdbcQuery(queryMethod, operations, result -> defaultRowMapper, converter,
375+
delegate);
362376

363377
ArgumentCaptor<SqlParameterSource> paramSource = ArgumentCaptor.forClass(SqlParameterSource.class);
364378
ArgumentCaptor<String> query = ArgumentCaptor.forClass(String.class);
@@ -401,8 +415,8 @@ public SqlParameterSource extractParameterSource() {
401415
mock(RelationResolver.class))
402416
: this.converter;
403417

404-
StringBasedJdbcQuery query = new StringBasedJdbcQuery(method.getDeclaredQuery(), method, operations, result -> mock(RowMapper.class),
405-
converter, delegate);
418+
StringBasedJdbcQuery query = new StringBasedJdbcQuery(method.getDeclaredQuery(), method, operations,
419+
result -> mock(RowMapper.class), converter, delegate);
406420

407421
query.execute(arguments);
408422

@@ -438,7 +452,8 @@ private StringBasedJdbcQuery createQuery(JdbcQueryMethod queryMethod) {
438452
}
439453

440454
private StringBasedJdbcQuery createQuery(JdbcQueryMethod queryMethod, String preparedReference, Object value) {
441-
return new StringBasedJdbcQuery(queryMethod, operations, new StubRowMapperFactory(preparedReference, value), converter, delegate);
455+
return new StringBasedJdbcQuery(queryMethod, operations, new StubRowMapperFactory(preparedReference, value),
456+
converter, delegate);
442457
}
443458

444459
interface MyRepository extends Repository<Object, Long> {
@@ -505,6 +520,10 @@ interface MyRepository extends Repository<Object, Long> {
505520

506521
@Query("select count(1) from person where (firstname, lastname) in (:tuples)")
507522
Object findByListOfTuples(@Param("tuples") List<Object[]> tuples);
523+
524+
@Lock(value = LockMode.PESSIMISTIC_READ)
525+
@Query("SELECT * FROM person WHERE id = :id")
526+
DummyEntity unsupportedWithLock(Long id);
508527
}
509528

510529
private static class CustomRowMapper implements RowMapper<Object> {

0 commit comments

Comments
 (0)