Skip to content

Commit

Permalink
#52 (#53)
Browse files Browse the repository at this point in the history
* fixes #52

* added exception translator to QuerydslSqlQueryConfiguration

* fixed tests

* updated CHANGELOG.md
  • Loading branch information
lpandzic authored Jan 10, 2022
1 parent 6e6a0f5 commit 6d9ade7
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 6 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
### 6.2.1

* fixed jdbc module not reusing connections [#52](/../../issues/52)
* added spring sql exception translation

### 6.2.0

* upgraded to Spring Boot 2.6.1
Expand Down
8 changes: 8 additions & 0 deletions infobip-spring-data-common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,18 @@
<groupId>com.querydsl</groupId>
<artifactId>querydsl-sql</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-sql-spring</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-relational</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
package com.infobip.spring.data.common;

import javax.sql.DataSource;
import java.util.Optional;

import com.querydsl.sql.SQLQueryFactory;
import com.querydsl.sql.SQLTemplates;
import com.querydsl.sql.spring.SpringConnectionProvider;
import com.querydsl.sql.spring.SpringExceptionTranslator;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.data.relational.core.mapping.NamingStrategy;

import javax.sql.DataSource;
import org.springframework.jdbc.support.SQLExceptionTranslator;

@Import(InfobipSpringDataCommonConfiguration.class)
@Configuration
Expand All @@ -18,16 +24,25 @@ public NamingStrategy pascalCaseNamingStrategy() {
return new PascalCaseNamingStrategy();
}

@ConditionalOnMissingBean
@Bean
public SpringExceptionTranslator springExceptionTranslator(Optional<SQLExceptionTranslator> sqlExceptionTranslator) {
return sqlExceptionTranslator.map(SpringExceptionTranslator::new).orElseGet(SpringExceptionTranslator::new);
}

@ConditionalOnMissingBean
@Bean
public com.querydsl.sql.Configuration querydslSqlConfiguration(SQLTemplates sqlTemplates) {
return new com.querydsl.sql.Configuration(sqlTemplates);
com.querydsl.sql.Configuration configuration = new com.querydsl.sql.Configuration(sqlTemplates);
configuration.setExceptionTranslator(new SpringExceptionTranslator());
return configuration;
}

@ConditionalOnMissingBean
@Bean
public SQLQueryFactory sqlQueryFactory(com.querydsl.sql.Configuration querydslSqlConfiguration,
DataSource dataSource) {
return new SQLQueryFactory(querydslSqlConfiguration, dataSource);
return new SQLQueryFactory(querydslSqlConfiguration, new SpringConnectionProvider(dataSource));
}

}
1 change: 1 addition & 0 deletions infobip-spring-data-jdbc-querydsl/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
<artifactId>infobip-spring-data-jdbc-annotation-processor</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import java.util.*;
import java.util.function.Function;

public class QuerydslJdbcPredicateExecutor<T> implements QuerydslPredicateExecutor<T> {
public class QuerydslJdbcPredicateExecutor<T> implements TransactionalQuerydslPredicateExecutor<T> {

private final RelationalPersistentEntity<T> entity;
private final JdbcConverter converter;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.infobip.spring.data.jdbc;

import org.springframework.data.querydsl.QuerydslPredicateExecutor;
import org.springframework.transaction.annotation.Transactional;

@Transactional(readOnly = true)
public interface TransactionalQuerydslPredicateExecutor<T> extends QuerydslPredicateExecutor<T> {

}
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ void shouldExtendSimpleQuerydslJdbcRepository() {
.isNotInstanceOf(CustomQuerydslJdbcRepository.class);
}

@Transactional
@Test
void springDataAndQuerydslShouldHandleTimeZoneTheSameForSameTimeZone() {
// given
Expand All @@ -279,6 +280,22 @@ void springDataAndQuerydslShouldHandleTimeZoneTheSameForSameTimeZone() {
then(querydslResults).isEqualTo(springDataResults);
}

@Transactional
@Test
void shouldSupportTransactionalAnnotatedTests() {
// given
Person johnDoe = givenSavedPerson("John", "Doe");

// when
List<Person> actual = repository.query(query -> query
.select(repository.entityProjection())
.from(person)
.fetch());

// then
then(actual).containsOnly(johnDoe);
}

@Value
public static class PersonProjection {

Expand Down

0 comments on commit 6d9ade7

Please sign in to comment.