#spring-boot #jpa #spring-data-jpa #amazon-redshift
#весенняя загрузка #jpa #spring-data-jpa #amazon-redshift
Вопрос:
я работаю над приложением Springboot, и мне нужно сохранить данные в redshift с помощью spring-boot-starter-data-jpa.
Но я не могу установить соединение между redshift и моим приложением springboot.
Вот моя зависимость от pom.xml:
<dependency>
<groupId>com.amazon.redshift</groupId>
<artifactId>redshift-jdbc42</artifactId>
<version>1.2.43.1067</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.3.7.RELEASE</version>
</dependency>
My Application.properties
spring.datasource.url=jdbc:redshift://hostaddress
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.amazon.redshift.jdbc.Driver
spring.jpa.hibernate.ddl-auto = create
Мой класс модели Java:
@Entity
@Table(schema = "public", name = "SampleModel")
public class SampleModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private int year;
private int month;
private BigDecimal price;
private BigDecimal total;
}
Трассировка стека исключений:
2021-01-04 19:00:53.378 INFO 5152 --- [ main] org.neo4j.ogm.metadata.DomainInfo : Building interface class map for 32 classes
2021-01-04 19:00:53.390 INFO 5152 --- [ main] org.neo4j.ogm.metadata.DomainInfo : Post-processing complete
2021-01-04 19:00:55.768 INFO 5152 --- [ task-1] com.zaxxer.hikari.pool.PoolBase : HikariPool-1 - Driver does not support get/set network timeout for connections. ([Amazon][JDBC](10220) Driver does not support this optional feature.)
2021-01-04 19:00:55.797 INFO 5152 --- [ task-1] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2021-01-04 19:00:57.056 INFO 5152 --- [ task-1] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.PostgreSQL81Dialect
2021-01-04 19:00:57.450 ERROR 5152 --- [ task-1] o.h.e.j.e.internal.JdbcEnvironmentImpl : Could not fetch the SequenceInformation from the database
java.sql.SQLException: [Amazon](500310) Invalid operation: relation "information_schema.sequences" does not exist;
at com.amazon.redshift.client.messages.inbound.ErrorResponse.toErrorException(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
at com.amazon.redshift.client.PGMessagingContext.handleErrorResponse(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
at com.amazon.redshift.client.PGMessagingContext.handleMessage(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
at com.amazon.jdbc.communications.InboundMessagesPipeline.getNextMessageOfClass(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
at com.amazon.redshift.client.PGMessagingContext.doMoveToNextClass(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
at com.amazon.redshift.client.PGMessagingContext.moveThroughMetadata(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
at com.amazon.redshift.client.PGMessagingContext.getNoData(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
at com.amazon.redshift.client.PGClient.directExecuteExtraMetadataWithMessage(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
at com.amazon.redshift.dataengine.PGQueryExecutor$CallableExecuteTask.call(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
at com.amazon.redshift.dataengine.PGQueryExecutor$CallableExecuteTask.call(Unknown Source) ~[redshift-jdbc42-1.2.43.1067.jar:na]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
Caused by: com.amazon.support.exceptions.ErrorException: [Amazon](500310) Invalid operation: relation "information_schema.sequences" does not exist;
... 13 common frames omitted
2021-01-04 19:00:57.588 INFO 5152 --- [ task-1] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2021-01-04 19:00:57.594 INFO 5152 --- [ task-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
Кто-нибудь сталкивался с этой проблемой или знает, как решить эту проблему?
Ответ №1:
С вашим подключением все в порядке — вы подключились успешно. Но ваше приложение пытается считывать данные из information_schema.sequences
таблицы, которая не существует в Redshift.
Похоже, у вас есть объекты JPA с идентификаторами, привязанными к последовательностям, и вы используете диалект PostgreSQL. Ваше приложение попытается инициализировать объекты путем чтения / создания последовательностей, но Redshift не поддерживает последовательности.
Я не уверен, чего вы пытаетесь достичь, но я не думаю, что это хорошая идея иметь отображение ORM поверх Redshift DB (вероятно, именно поэтому для Redshift нет диалекта гибернации).