【发布时间】:2018-10-21 15:18:30
【问题描述】:
我在某些表上的 PostgreSQL 数据库列存在一些问题。
如果我声明一个名为 String 的列,名称类似于 a_column_name Hibernate 接受名称为 a_column_name 的表列。
但是当我将列类型声明为Integer 或BigDecimal 时,我的问题就来了。一开始,Hibernate 会创建一个类型为 int4 或 numeric(19, 2) 的新列,其名称类似于 acolumnname 和 NULL。
Hibernate: alter table t_myTable add column acolumnname int4
或
Hibernate: alter table t_myTable add column acolumnname numeric(19, 2)
我尝试设置name-strategy on the config file of Spring boot:
jpa:
show-sql: true
hibernate:
ddl-auto: update
properties:
hibernate.cache.use_second_level_cache: false
hibernate.cache.use_query_cache: false
hibernate.generate_statistics: true
naming.physical-strategy: PhysicalNamingStrategyStandardImpl
但是没有结果...
所以我的问题是为什么 Hibernate 接受 String 类型的列名,但不喜欢 Integer 或 BigDecimal 类型的列名.
问候。
---- 更新 1 ----
按照 Veselin Davidov 的要求搜索实体并在此处发布代码后,我注意到有些列被接受,而另一些则不被接受。
实体是从公司框架创建的,该框架使用 DB 结构(表、字段、字段类型...)解析 JSON 并生成 JAVA 实体类。因此,在看到 SAM 的答案后,我更改了实体模板的代码以添加@Column(name = "your_column_name")。现在,当 Hibernate 启动时,它不会添加名称错误的列并使用 DB 列。
【问题讨论】:
-
你能告诉我们你的实体吗?为什么不在实体类中添加列名?
-
您好,抱歉耽搁了,我试图找出问题所在,但我做到了。由于 SAM 的回答,我已经更新了描述以及我如何解决问题。无论如何感谢您的时间和帮助!
标签: java postgresql hibernate spring-boot