Spring boot jpa/hibernate 遇到列类型错误(json字段)

Posted

技术标签:

【中文标题】Spring boot jpa/hibernate 遇到列类型错误(json字段)【英文标题】:Spring boot jpa / hibernate wrong column type encounter (json field) 【发布时间】:2019-05-10 20:10:42 【问题描述】:

我正在使用 Spring Boot 将表映射到 POJO,但出现以下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [com/mercadolibre/linters/db/config/DbaConfig.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [linter_summary] in table [result]; found [json (Types#CHAR)], but expecting [varchar(255) (Types#VARCHAR)]

数据库中的字段linter_summary 是JSON 类型,而在我的pojo 上是一个字符串。我不明白为什么会出现这个错误,Java 中是否有用于 JSON 字段的特殊变量?

【问题讨论】:

【参考方案1】:

添加这个 Maven 依赖项:

<!-- https://mvnrepository.com/artifact/com.vladmihalcea/hibernate-types-52 -->
<dependency>
    <groupId>com.vladmihalcea</groupId>
    <artifactId>hibernate-types-52</artifactId>
    <version>$hibernate-types.version</version>
</dependency>

接下来,将这个注解添加到实体类中:

@TypeDefs(
    @TypeDef(name = "json", typeClass = JsonStringType.class),
    @TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
)

然后将其添加到列定义中:

@Type( type = "json" )
@Column( columnDefinition = "json" )

其中@Typeorg.hibernate.annotations.Type

解释见this article

【讨论】:

嗨 Eugen,但我得到 org.hibernate.boot.registry.classloading.spi.ClassLoadingException:无法加载类 [json] @elcharrua 不,您可以简单地将@Lob 用于longtext 非常感谢欧根 您好,执行此操作后,出现错误无法解析符号“JsonStringType”和无法解析符号“JsonBinaryType” 我也遇到了同样的错误。 JsonStringType 和 JsonBinaryType 无法解析。【参考方案2】:

在某些情况下,如果您不构建 Web 服务器容器,请尝试添加

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-json</artifactId>
        </dependency>

这有助于提供您可能需要的一些序列化功能。

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Spring boot jpa/hibernate 遇到列类型错误(json字段)的主要内容,如果未能解决你的问题,请参考以下文章

制作多个 EntityManager(Spring-Boot-JPA、Hibernate、MSSQL)

Spring Boot / JPA / Hibernate,如何根据 Spring 配置文件切换数据库供应商?

Spring boot之 JPA/Hibernate/Spring Data

Spring Boot JPA Hibernate - 以毫秒精度存储日期

JPA/Hibernate 在 Spring Boot 应用程序中插入不存在的表

使用 JPA/Hibernate 将 Spring Boot 连接到 PostgreSql 数据库时失败