我在springboot(2.1)+postgres(10.5)+hibernate(5.3.7).中使用jsonb
以下是文件中的更改:
`.... <dependency> <groupId>com.vladmihalcea</groupId> <artifactId>hibernate-types-52</artifactId> <version>2.3.5</version> </dependency> ....` ```javascript@Entity(name = "Event")
@Table(name = "event")
@TypeDefs({
@TypeDef(name = "string-array", typeClass = StringArrayType.class),@TypeDef(name = "int-array", typeClass = IntArrayType.class),@TypeDef(name = "json", typeClass = JsonStringType.class),@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class),@TypeDef(name = "jsonb-node", typeClass = JsonNodeBinaryType.class),@TypeDef(name = "json-node", typeClass = JsonNodeStringType.class),})
公共类事件{
@Type(type = "jsonb")@Column(columnDefinition = "jsonb")private List<Location> alternativeLocations = new ArrayList<Location>();//Getters and setters omitted for brevity}
在运行springboot应用程序时,它给出了以下错误:nested exception is org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [jsonb]
所有其他设置都是使用postgres的标准sprintboot设置。上述错误的后创建即将到来。
请让我知道可能的原因,谢谢:)
发布于 2019-05-07 21:37:09
我正在使用一个更最新的版本2.4.3的hibernate类型-52个类,并得到了同样的错误。
我仅使用实体类上所需的惟一类型胡枝子来解决这个问题。
@TypeDef(name = "jsonb", typeClass = JsonBinaryType.class)Postgres 9.4、Java 11、Hibernate 5.3.7
@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;
...发布于 2019-10-24 09:47:54
试试下面的方法
公共类ProjectPostgreSQL95Dialect扩展PostgreSQL95Dialect{
public ProjectPostgreSQL95Dialect() {
this.registerColumnType(Types.JAVA_OBJECT, "jsonb");
}}
在application.properties文件中替换下面的内容。
hibernate.dialect=org.hibernate.dialect.PostgreSQL95Dialect
替换
hibernate.dialect=com.ashok.config.PostgreSQL95Dialect
发布于 2021-08-03 12:35:57
我建议的是:
创建一个类,在您的方言中注册该数据类型。
//记住,我假设您正在使用Postgres。替换
扩展PostgreSQL94Dialect
用你DB的方言。
public class MyPostgreSQL94Dialect extends PostgreSQL94Dialect {
public MyPostgreSQL94Dialect() {
this.registerColumnType(Types.JAVA_OBJECT, "jsonb");
}
}在application.properties中的下一个配置应用程序的spring.jpa.properties.hibernate.dialect
spring.jpa.properties.hibernate.dialect={java_path_to_this_class}.MyPostgreSQL94Dialect完成上述操作后,请确保将使用您的方言中定义的jsonb的每个实体都声明在这些实体上,现在这些实体将理解类型定义。
@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>();
}https://stackoverflow.com/questions/53943108
复制相似问题