我的实体之一包括一个数组字段,我使用hibernate-types-52库进行了映射:
@TypeDef(name = "string-array", typeClass = StringArrayType.class)
@Table(name = "some_table")
public class SomeEntity implements Synchronizable {
@Id
@SequenceGenerator(name = "some_table_id", sequenceName = "some_table_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "some_table_id_seq")
@Column(name = "id")
private Long id;
@Column(name = "values")
@Type(type = "string-array")
private String[] values;
}
application.yml:
spring:
jpa:
database: POSTGRESQL
show-sql: true
hibernate:
ddl-auto: create
show-sql: true
properties:
hibernate:
dialect: my.package.PostgreSQL95ArrayDialect
PostgreSQL95ArrayDialect:
import org.hibernate.dialect.PostgreSQL95Dialect;
import java.sql.Types;
public class PostgreSQL95ArrayDialect
extends PostgreSQL95Dialect {
public PostgreSQL95ArrayDialect() {
super();
this.registerColumnType(Types.ARRAY, "array");
this.registerColumnType(Types.OTHER, "jsonb");
}
}
问题:
o.h.t.s.i.ExceptionHandlerLoggedImpl - GenerationTarget encountered exception accepting command :
GenerationTarget encountered exception accepting command :
Error executing DDL "create table some_table (id int8 not null, values array)" via JDBC Statement ...
因此,SQL部分“值数组”看起来很奇怪。我应该如何更改休眠选项或代码以对其进行修复?
答案 0 :(得分:1)
您必须为正确的表DDL指定columnDefinition
,如下所示:
@TypeDef(name = "string-array", typeClass = StringArrayType.class)
@Table(name = "some_table")
public class SomeEntity implements Synchronizable {
@Id
@SequenceGenerator(name = "some_table_id", sequenceName = "some_table_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "some_table_id_seq")
@Column(name = "id")
private Long id;
@Column(name = "values")
@Type(type = "string-array", columnDefinition = "text[]")
private String[] values;
}