Hibernate5不支持postgresql jsonb 默认情况下为数据类型。有什么办法可以实施吗 jsonb 支持hibernate+spring jpa?如果有办法的话,使用它的利弊是什么 jsonb 和冬眠在一起?
jsonb
oxosxuxt1#
感谢弗拉德·米哈尔恰,我们有这样的机会!)他创建了hibernate类型库:
<dependency> <groupId>com.vladmihalcea</groupId> <artifactId>hibernate-types-52</artifactId> <version>2.1.1</version></dependency>
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>2.1.1</version>
</dependency>
它为hibernate添加了对“json”、“jsonb”和其他类型的支持:
@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@AllArgsConstructorpublic class Child implements Serializable { private String name;}
@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;
}
@AllArgsConstructor
public class Child implements Serializable {
更多信息:1,2
eqqqjvef2#
@cepr0-s的答案是正确的,但我有一些问题。我尝试将它与postgresql一起使用时遇到了一个异常 org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111 . 在我的例子中,解决这个问题的方法是添加自定义的hibernate方言。此资源可能会有所帮助。
org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
// CustomPostgreSQLDialect.javapublic 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()); }}
// 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.ymlspring: jpa: properties: hibernate: dialect: "com.test.CustomPostgreSQLDialect"
# application.yml
spring:
jpa:
properties:
hibernate:
dialect: "com.test.CustomPostgreSQLDialect"
2条答案
按热度按时间oxosxuxt1#
感谢弗拉德·米哈尔恰,我们有这样的机会!)
他创建了hibernate类型库:
它为hibernate添加了对“json”、“jsonb”和其他类型的支持:
更多信息:1,2
eqqqjvef2#
@cepr0-s的答案是正确的,但我有一些问题。我尝试将它与postgresql一起使用时遇到了一个异常
org.hibernate.MappingException: No Dialect mapping for JDBC type: 1111
. 在我的例子中,解决这个问题的方法是添加自定义的hibernate方言。此资源可能会有所帮助。