使用PostgreSQL 9.5进行JPA模式验证

时间:2016-10-04 15:14:59

标签: postgresql hibernate jpa

我在Postgres数据库中使用JPA(hibernate),我的hibernate数据库配置如下:

properties.setProperty("hibernate.dialect", "org.hibernate.dialect.PostgreSQLDialect");
properties.setProperty("hibernate.hbm2ddl.auto","validate");

我有一张属性为created_by_user_id

的表格
CREATE TABLE dppm_main.user_account_profile
( ....//other columns
  created_by_user_id integer
)

映射到JPA实体,如下所示:

@Column(name = "created_by_user_id")
private Long createdByUserId;

在进行架构验证时,我收到以下错误:

org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column 
type encountered in column [created_by_user_id] in table [user_account_profile];
 **found [int4 (Types#INTEGER)], but expecting [int8 (Types#BIGINT)]**

我该如何解决?我在很多地方遇到此问题,因此可以通过扩展PostgreSQL82Dialect而不是 columnDefinition 来解决此问题。

1 个答案:

答案 0 :(得分:1)

关于Java类型和Postgres类型之间类型不匹配的例外很明显。

我没有清楚地了解你在Postgres中的类型是什么,所以我指出了几种类型的转换:

Postgres smallint 到Java - > java.lang.Integer

Postgres integer 到Java - > java.lang.Integer

Postgres bigint 到Java - > java.lang.Long

话虽如此,只需改变:

@Column(name = "created_by_user_id")
private Long createdByUserId;

要:

@Column(name = "created_by_user_id")
private Integer createdByUserId;