是否可以将Hibernate与PostgreSql';s JSONB数据类型?

是否可以将Hibernate与PostgreSql';s JSONB数据类型?,hibernate,jpa,jsonb,Hibernate,Jpa,Jsonb,默认情况下,Hibernate 5不支持PostgreSQLjsonb数据类型 有没有办法实现对Hibernate+SpringJPA的支持 如果有办法的话,在Hibernate中使用jsonb有哪些优点和缺点?谢谢,我们有这样的机会!) 他创建了lib: Vladmichalcea网站 ,-s的答案是正确的,但尽管我有一些问题。我在尝试将它与PostgreSQLorg.hibernate.MappingException一起使用时遇到异常:没有JDBC类型的方言映射:1111。在我的例子中,

默认情况下,Hibernate 5不支持PostgreSQL
jsonb
数据类型

有没有办法实现对Hibernate+SpringJPA的支持

如果有办法的话,在Hibernate中使用
jsonb
有哪些优点和缺点?

谢谢,我们有这样的机会!)

他创建了lib:


Vladmichalcea网站
,

-s的答案是正确的,但尽管我有一些问题。我在尝试将它与PostgreSQL
org.hibernate.MappingException一起使用时遇到异常:没有JDBC类型的方言映射:1111
。在我的例子中,解决这个问题的方法是添加自定义的hibernate方言。资源可能会有所帮助

// CustomPostgreSQLDialect.java
public class CustomPostgreSQLDialect extends PostgreSQL10Dialect {

    public CustomPostgreSQLDialect() {
        super();
        registerHibernateType(Types.OTHER, StringArrayType.class.getName());
        registerHibernateType(Types.OTHER, IntArrayType.class.getName());
        registerHibernateType(Types.OTHER, JsonStringType.class.getName());
        registerHibernateType(Types.OTHER, JsonBinaryType.class.getName());
        registerHibernateType(Types.OTHER, JsonNodeBinaryType.class.getName());
        registerHibernateType(Types.OTHER, JsonNodeStringType.class.getName());
    }
}
-


谢谢@Cepr0的回答。实际上,这个库支持按对象字段搜索吗?正如我所看到的,这个库非常原始,社区也不是很大,它可靠吗?@Aventes Vlad是@Aventes中的一个,它拥有超过750个GitHub明星,每月下载量超过40万。因此,社区非常大,因为Hibernate类型框架提供了对JSON、数组、Inet、HStore、TSVector、DBs特定枚举、YearMonth和许多其他功能的支持。@Vladmichalcea为什么Hibernate不支持这些类型?因为它们不是标准的sql类型?JSON和数组是标准的,但Hibernate支持的所有DBs都不支持它们。总有一天,它可能会支持这项计划。同时,您还需要使用Hibernate类型项目。请不要忘记接受/投票帮助您的答案…是的,当然。谢谢你的帮助:)
@Data
@NoArgsConstructor
@Entity
@Table(name = "parents")
@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)
})
public class Parent implements Serializable {

    @Id
    @GeneratedValue(strategy = SEQUENCE)
    private Integer id;

    @Column(length = 32, nullable = false)
    private String name;

    @Type(type = "jsonb")
    @Column(columnDefinition = "jsonb")
    private List<Child> children;

    @Type(type = "string-array")
    @Column(columnDefinition = "text[]")
    private String[] phones;

    public Parent(String name, List<Child> children, String... phones) {
        this.name = name;
        this.children = children;
        this.phones = phones;
    }
}

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Child implements Serializable {
    private String name;
}
// CustomPostgreSQLDialect.java
public class CustomPostgreSQLDialect extends PostgreSQL10Dialect {

    public CustomPostgreSQLDialect() {
        super();
        registerHibernateType(Types.OTHER, StringArrayType.class.getName());
        registerHibernateType(Types.OTHER, IntArrayType.class.getName());
        registerHibernateType(Types.OTHER, JsonStringType.class.getName());
        registerHibernateType(Types.OTHER, JsonBinaryType.class.getName());
        registerHibernateType(Types.OTHER, JsonNodeBinaryType.class.getName());
        registerHibernateType(Types.OTHER, JsonNodeStringType.class.getName());
    }
}
# application.yml
spring:
  jpa:
    properties:
      hibernate:
        dialect: "com.test.CustomPostgreSQLDialect"