首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Springboot \ JSONB Postgres \ Exception:无法加载类[jsonb]

Springboot \ JSONB Postgres \ Exception:无法加载类[jsonb]
EN

Stack Overflow用户
提问于 2018-12-27 10:00:14
回答 3查看 13.2K关注 0票数 9

我在springboot(2.1)+postgres(10.5)+hibernate(5.3.7).中使用jsonb

以下是文件中的更改:

  1. 在pom.xml中
代码语言:javascript
复制
 `....     <dependency>         <groupId>com.vladmihalcea</groupId>         <artifactId>hibernate-types-52</artifactId>         <version>2.3.5</version>     </dependency>     ....` 
  1. 实体定义:
代码语言:javascript
复制
```javascript

@Entity(name = "Event")

@Table(name = "event")

@TypeDefs({

代码语言:javascript
复制
@TypeDef(name = "string-array", typeClass = StringArrayType.class),
代码语言:javascript
复制
@TypeDef(name = "int-array", typeClass = IntArrayType.class),
代码语言:javascript
复制
@TypeDef(name = "json", typeClass = JsonStringType.class),
代码语言:javascript
复制
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class),
代码语言:javascript
复制
@TypeDef(name = "jsonb-node", typeClass = JsonNodeBinaryType.class),
代码语言:javascript
复制
@TypeDef(name = "json-node", typeClass = JsonNodeStringType.class),

})

公共类事件{

代码语言:javascript
复制
@Type(type = "jsonb")
代码语言:javascript
复制
@Column(columnDefinition = "jsonb")
代码语言:javascript
复制
private List<Location> alternativeLocations = new ArrayList<Location>();
代码语言:javascript
复制
//Getters and setters omitted for brevity

}

代码语言:javascript
复制

在运行springboot应用程序时,它给出了以下错误:nested exception is org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [jsonb]

所有其他设置都是使用postgres的标准sprintboot设置。上述错误的后创建即将到来。

请让我知道可能的原因,谢谢:)

EN

回答 3

Stack Overflow用户

发布于 2019-05-07 21:37:09

我正在使用一个更最新的版本2.4.3的hibernate类型-52个类,并得到了同样的错误。

我仅使用实体类上所需的惟一类型胡枝子来解决这个问题。

代码语言:javascript
复制
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)

Postgres 9.4、Java 11、Hibernate 5.3.7

代码语言:javascript
复制
@Entity(name = "audit")
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)
public class Audit {
    @Type(type = "jsonb")
    @Column(name="audit_data", columnDefinition = "jsonb")
    private Map<String,Object> auditData;
...
票数 14
EN

Stack Overflow用户

发布于 2019-10-24 09:47:54

试试下面的方法

公共类ProjectPostgreSQL95Dialect扩展PostgreSQL95Dialect{

代码语言:javascript
复制
public ProjectPostgreSQL95Dialect() {
    this.registerColumnType(Types.JAVA_OBJECT, "jsonb");
}

}

在application.properties文件中替换下面的内容。

hibernate.dialect=org.hibernate.dialect.PostgreSQL95Dialect

替换

hibernate.dialect=com.ashok.config.PostgreSQL95Dialect

票数 0
EN

Stack Overflow用户

发布于 2021-08-03 12:35:57

我建议的是:

创建一个类,在您的方言中注册该数据类型。

//记住,我假设您正在使用Postgres。替换

扩展PostgreSQL94Dialect

用你DB的方言。

代码语言:javascript
复制
public class MyPostgreSQL94Dialect extends PostgreSQL94Dialect {
    public MyPostgreSQL94Dialect() {
        this.registerColumnType(Types.JAVA_OBJECT, "jsonb");
    }
}

在application.properties中的下一个配置应用程序的spring.jpa.properties.hibernate.dialect

代码语言:javascript
复制
spring.jpa.properties.hibernate.dialect={java_path_to_this_class}.MyPostgreSQL94Dialect

完成上述操作后,请确保将使用您的方言中定义的jsonb的每个实体都声明在这些实体上,现在这些实体将理解类型定义。

代码语言:javascript
复制
@Data
@TypeDefs({@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)})
public class Event implements Serializable {

    @Id
    private String id;

    @Type(type = "jsonb")
    @Column(columnDefinition = "jsonb")
    private List<Location> alternativeLocations = new ArrayList<Location>();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53943108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档