在 postgres spring-boot + eclipselink 中保存为 JSON 数据类型的替代解决方案
Posted
技术标签:
【中文标题】在 postgres spring-boot + eclipselink 中保存为 JSON 数据类型的替代解决方案【英文标题】:Alternate solution to save as JSON datatype in postgres spring-boot + eclipselink 【发布时间】:2017-03-20 09:50:00 【问题描述】:我正在使用带有 spring-boot JPA 的 eclipselink 2.6 来实现 postgres 中的持久性。
我将对象列表作为 JSON 列保存在数据库中。根据此解决方案:eclipselink + @convert(json) + postgres + list property 我能够将数据保存在 postgres 中。
当该列为空时,我得到这个异常:
Caused by: org.postgresql.util.PSQLException: ERROR: column "sample_column" is of type json but expression is of type character varying
Hint: You will need to rewrite or cast the expression.
我可以通过这个答案解决这个问题:
Writing to JSON column of Postgres database using Spring / JPA
Q1:除了设置此属性stringtype=unspecified
int url spring.datasource.url=jdbc:postgresql://localhost:5432/dbname?stringtype=unspecified
,还有其他解决方案吗?
Q2:如果没有,我如何在spring-boot的application.prooerties中设置stringtype=unspecified
而不是将其嵌入spring.datasource.url
【问题讨论】:
关于 Q2,您已经在 application.prooerties 中设置了 stringtype=unspecified 吗?您还在寻找什么? 你用的是什么spring-boot版本? spring-boot 1.4.1 【参考方案1】:答案是肯定的,但是是特定于实现的。
例如,在 Tomcat 中,此属性称为connectionProperties
,因此您可以这样写:
spring.datasource.tomcat.connection-properties: stringtype=unspecified
来自the Spring-Boot documentation。
也可以使用它们各自的前缀(spring.datasource.tomcat.、spring.datasource.hikari.、spring.datasource.dbcp.* 和 spring .datasource.dbcp2.*)。有关详细信息,请参阅您正在使用的连接池实现的文档。
【讨论】:
【参考方案2】:如果您使用的是 spring-boot 1.4.1 或更高版本,
在资源文件夹中添加一个data.sql文件,-- IN H2 database, create a column as 'OTHER' data type,
-- if H2 fails to create a column as 'JSON' data type.
CREATE DOMAIN IF NOT EXISTS JSON AS OTHER;
此 .sql 文件将在您的应用程序启动期间执行,并将在表中为 H2 数据库中的 'json' 数据类型列创建数据类型为 others
的列.
【讨论】:
以上是关于在 postgres spring-boot + eclipselink 中保存为 JSON 数据类型的替代解决方案的主要内容,如果未能解决你的问题,请参考以下文章
Spring-boot JPA 连接到 postgres,其中在运行时提供数据库和模式
在 postgres spring-boot + eclipselink 中保存为 JSON 数据类型的替代解决方案