gpt4 book ai didi

spring-boot - 是否可以将 Snowflake 与 Spring Boot/JPA/Hibernate 一起使用

转载 作者:行者123 更新时间:2023-12-05 04:54:47 27 4
gpt4 key购买 nike

我正在创建一个直接写入雪花数据库的服务。我在尝试让 spring data jpa 与 Snowflake 有效工作时遇到了很多麻烦。我的主要问题是我无法通过 Jpa Repository 接口(interface) Save 方法将实体保存到 Snowflake DB。因为此应用程序用于将数据转储到 Snowflake 中,所以能够利用 JPA 将使生活变得更加轻松。

我不想滚动自己的 native 查询,所以我的问题是在使用 Snowflake 时是否可以利用 Hibernate。

我希望能够做的主要事情是使用 Jpa Repositories inbuild Save 方法持久化实体。

以下是我当前的配置。任何关于可以在配置中改进什么以实现此工作的想法,或者关于它是否可能的任何意见都将不胜感激。

spring:
profiles:
active: local
application:
name: Service
datasource:
driverClassName: net.snowflake.client.jdbc.SnowflakeDriver
url: ${SPRING_DATASOURCE_URL}
username: ${SPRING_DATASOURCE_USERNAME}
password: ${SPRING_DATASOURCE_PASSWORD}
flyway:
locations: classpath:db/migration/common,classpath:db/migration/snowflake
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.SQLServerDialect
order_inserts: true
create sequence award_event_id_seq;
create table award_event
(
id INT NOT NULL DEFAULT award_event_id_seq.nextval PRIMARY KEY,
event_source_system varchar not null,
event_trigger VARCHAR NOT NULL,
event_triggered_by VARCHAR NOT NULL,
event_timestamp TIMESTAMP NOT NULL
)
@Entity(name = "award_event")
@SequenceGenerator(name = "award_event_id_seq", sequenceName = "award_event_id_seq", allocationSize = 1)
data class AwardEvent(

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
val id: Int = -1,

val eventTrigger: String,
val eventTriggeredBy: String,
val eventTimestamp: LocalDateTime,
val eventSourceSystem: String
)
override fun receiveMessage(message: String) {
logger.info("Receiving award event: $message")
val awardEvent: AwardEventMessage = message.toObject()
// This Save method does not work and throws an error specified below
awardEventRepository.save(awardEvent.toAwardEvent())
}
2021-01-08 10:49:28.163 ERROR 3239 --- [nio-9106-exec-1] o.hibernate.id.enhanced.TableStructure   : could not read a hi value

net.snowflake.client.jdbc.SnowflakeSQLException: SQL compilation error:
syntax error line 1 at position 50 unexpected 'with'.
syntax error line 1 at position 72 unexpected ')'.
at net.snowflake.client.jdbc.SnowflakeUtil.checkErrorAndThrowExceptionSub(SnowflakeUtil.java:124)
at net.snowflake.client.jdbc.SnowflakeUtil.checkErrorAndThrowException(SnowflakeUtil.java:64)
at net.snowflake.client.core.StmtUtil.pollForOutput(StmtUtil.java:434)
at net.snowflake.client.core.StmtUtil.execute(StmtUtil.java:338)
at net.snowflake.client.core.SFStatement.executeHelper(SFStatement.java:506)
at net.snowflake.client.core.SFStatement.executeQueryInternal(SFStatement.java:233)
at net.snowflake.client.core.SFStatement.executeQuery(SFStatement.java:171)
at net.snowflake.client.core.SFStatement.execute(SFStatement.java:754)
at net.snowflake.client.jdbc.SnowflakeStatementV1.executeQueryInternal(SnowflakeStatementV1.java:245)
at net.snowflake.client.jdbc.SnowflakePreparedStatementV1.executeQuery(SnowflakePreparedStatementV1.java:117)

最佳答案

作为后续行动,我无法使用上面概述的方法启动和运行应用程序。我仍然不确定为什么,但认为这可能与缺乏对雪花序列作为 Spring 主键生成类型的支持有关。

我将生成类型更改为UUID,应用程序开始按预期运行。对于需要什么类型的主键没有要求,所以这种方法是令人满意的。

create sequence award_event_id_seq;
create table award_event
(
id varchar not null constraint award_event_pkey primary key,
event_source_system varchar not null,
event_trigger varchar not null,
event_triggered_by varchar not null,
event_timestamp timestamp not null
)
@Entity(name = "award_event")
data class AwardEvent(

@Id
@GeneratedValue
@Type(type = "uuid-char")
val id: UUID = UUID.randomUUID(),

val eventTrigger: String,
val eventTriggeredBy: String,
val eventTimestamp: LocalDateTime,
val eventSourceSystem: String
)

关于spring-boot - 是否可以将 Snowflake 与 Spring Boot/JPA/Hibernate 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65628872/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com