#563 - Adapts JDBC examples to changes in Spring Data JDBC 2.0.
Since SQL Identifiers are now quoted letter casing must be taken into consideration when specifying column names in `@Column` or similar. Disabled Liquibase which isn't used/configured at all and therefore doesn't work. Moved application context configurations to use `AbstractJdbcConfiguration`.
This commit is contained in:
@@ -25,21 +25,26 @@ import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.core.io.ClassPathResource;
|
||||
import org.springframework.data.jdbc.core.convert.JdbcCustomConversions;
|
||||
import org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration;
|
||||
import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories;
|
||||
import org.springframework.data.jdbc.repository.config.JdbcConfiguration;
|
||||
import org.springframework.data.relational.core.mapping.event.BeforeSaveEvent;
|
||||
import org.springframework.jdbc.core.JdbcOperations;
|
||||
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.init.DataSourceInitializer;
|
||||
import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator;
|
||||
import org.springframework.lang.Nullable;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
|
||||
/**
|
||||
* @author Jens Schauder
|
||||
* @author Mark Paluch
|
||||
*/
|
||||
@Configuration
|
||||
@EnableJdbcRepositories
|
||||
public class AggregateConfiguration extends JdbcConfiguration {
|
||||
public class AggregateConfiguration extends AbstractJdbcConfiguration {
|
||||
|
||||
final AtomicInteger id = new AtomicInteger(0);
|
||||
|
||||
@@ -93,4 +98,18 @@ public class AggregateConfiguration extends JdbcConfiguration {
|
||||
public NamedParameterJdbcTemplate namedParameterJdbcTemplate(JdbcOperations operations) {
|
||||
return new NamedParameterJdbcTemplate(operations);
|
||||
}
|
||||
|
||||
@Bean
|
||||
DataSourceInitializer initializer(DataSource dataSource) {
|
||||
|
||||
DataSourceInitializer initializer = new DataSourceInitializer();
|
||||
initializer.setDataSource(dataSource);
|
||||
|
||||
ClassPathResource script = new ClassPathResource("schema.sql");
|
||||
ResourceDatabasePopulator populator = new ResourceDatabasePopulator(script);
|
||||
initializer.setDatabasePopulator(populator);
|
||||
|
||||
return initializer;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ package example.springdata.jdbc.basics.aggregate;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Wither;
|
||||
import lombok.With;
|
||||
|
||||
import java.time.Period;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
@@ -30,6 +30,7 @@ import org.springframework.data.annotation.AccessType.Type;
|
||||
import org.springframework.data.annotation.Id;
|
||||
import org.springframework.data.annotation.Transient;
|
||||
import org.springframework.data.relational.core.mapping.Column;
|
||||
import org.springframework.data.relational.core.mapping.MappedCollection;
|
||||
|
||||
/**
|
||||
* A Lego Set consisting of multiple Blocks and a manual
|
||||
@@ -49,12 +50,12 @@ public class LegoSet {
|
||||
* Since Manuals are part of a {@link LegoSet} and only make sense inside a {@link LegoSet} it is considered part of
|
||||
* the Aggregate.
|
||||
*/
|
||||
@Column("handbuch_id")
|
||||
@Column("HANDBUCH_ID")
|
||||
private Manual manual;
|
||||
|
||||
// You can build multiple models from one LegoSet
|
||||
@Column(keyColumn = "name")
|
||||
private final @AccessType(Type.FIELD) @Wither(AccessLevel.PACKAGE) Map<String, Model> models;
|
||||
@MappedCollection(keyColumn = "NAME")
|
||||
private final @AccessType(Type.FIELD) @With(AccessLevel.PACKAGE) Map<String, Model> models;
|
||||
|
||||
LegoSet() {
|
||||
this.models = new HashMap<>();
|
||||
@@ -62,7 +63,7 @@ public class LegoSet {
|
||||
|
||||
// conversion for custom types currently has to be done through getters/setter + marking the underlying property with
|
||||
// @Transient.
|
||||
@Column("min_age")
|
||||
@Column("MIN_AGE")
|
||||
public int getIntMinimumAge() {
|
||||
return toInt(this.minimumAge);
|
||||
}
|
||||
@@ -71,7 +72,7 @@ public class LegoSet {
|
||||
minimumAge = toPeriod(years);
|
||||
}
|
||||
|
||||
@Column("max_age")
|
||||
@Column("MAX_AGE")
|
||||
public int getIntMaximumAge() {
|
||||
return toInt(this.maximumAge);
|
||||
}
|
||||
|
||||
@@ -27,10 +27,10 @@ import org.springframework.data.relational.core.mapping.Table;
|
||||
* @author Jens Schauder
|
||||
*/
|
||||
@Data
|
||||
@Table("handbuch")
|
||||
@Table("HANDBUCH")
|
||||
public class Manual {
|
||||
|
||||
@Column("handbuch_id")
|
||||
@Column("HANDBUCH_ID")
|
||||
private @Id Long id;
|
||||
private String author, text;
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ package example.springdata.jdbc.basics.aggregate;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.Value;
|
||||
import lombok.experimental.Wither;
|
||||
import lombok.With;
|
||||
|
||||
/**
|
||||
* One of potentially multiple models that can be build from a single {@link LegoSet}. No getters or setters needed.
|
||||
@@ -25,7 +25,7 @@ import lombok.experimental.Wither;
|
||||
* @author Jens Schauder
|
||||
*/
|
||||
@Value
|
||||
@Wither(AccessLevel.PACKAGE)
|
||||
@With(AccessLevel.PACKAGE)
|
||||
public class Model {
|
||||
String name, description;
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ import org.assertj.core.groups.Tuple;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureJdbc;
|
||||
import org.springframework.boot.test.autoconfigure.data.jdbc.AutoConfigureDataJdbc;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.annotation.DirtiesContext;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
@@ -39,7 +39,7 @@ import org.springframework.test.context.junit4.SpringRunner;
|
||||
*/
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = AggregateConfiguration.class)
|
||||
@AutoConfigureJdbc
|
||||
@AutoConfigureDataJdbc
|
||||
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
|
||||
public class AggregateTests {
|
||||
|
||||
|
||||
@@ -21,14 +21,10 @@ import org.jooq.impl.DataSourceConnectionProvider;
|
||||
import org.jooq.impl.DefaultConfiguration;
|
||||
import org.jooq.impl.DefaultDSLContext;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationEvent;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration;
|
||||
import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories;
|
||||
import org.springframework.data.jdbc.repository.config.JdbcConfiguration;
|
||||
import org.springframework.data.relational.core.mapping.event.RelationalEvent;
|
||||
import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
|
||||
|
||||
/**
|
||||
@@ -42,8 +38,7 @@ import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy;
|
||||
*/
|
||||
@Configuration
|
||||
@EnableJdbcRepositories
|
||||
@Import(JdbcConfiguration.class)
|
||||
public class CategoryConfiguration {
|
||||
public class CategoryConfiguration extends AbstractJdbcConfiguration {
|
||||
|
||||
@Autowired private DataSource dataSource;
|
||||
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
logging.level.org.springframework.data=INFO
|
||||
logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG
|
||||
logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG
|
||||
spring.liquibase.enabled=false
|
||||
Reference in New Issue
Block a user