java - Hibernate 在 Spring Boot 1.4 开始时重命名了一些列

标签 java postgresql hibernate spring-boot

我的 PostgreSQL 数据库列在某些表上遇到一些问题。

如果我声明一个名为 a_column_nameString 列,Hibernate 接受名为 a_column_name 的表列.

但是当我将列类型声明为 IntegerBigDecimal 时,我的问题就出现了。开始时,Hibernate 创建一个 int4numeric(19, 2) 类型的新列,其名称类似于 acolumnname 带有 NULL。

Hibernate:更改表 t_myTable 添加列 acolumnname int4

Hibernate:更改表 t_myTable 添加列 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 类型的列名,但不喜欢 IntegerBigDecimal 类型的列名.

问候。

---- 更新 1 ----

按照 Veselin Davidov 的要求搜索实体并在此处发布代码后,我注意到有些列被接受,而另一些则不被接受。

实体是从公司框架创建的,该框架使用数据库结构(表、字段、字段类型...)解析 JSON 并生成 JAVA 实体类。因此,在看到 SAM 的答案后,我更改了实体模板的代码以添加 @Column(name = "your_column_name")。现在,当 Hibernate 启动时,它不会添加名称错误的列并使用 DB 列。

最佳答案

如果您的 Hibernate 实体类如下所示:

@Entity
public class Registration{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;

    @Column
    @Basic
    private String name;

    // getters and setters

}

那么您的注册表将包含以“id”和“name”命名的字段,就像您使用的auto-ddl=update一样。为了避免这种情况,您可以使用 @Column(name = "your_column_name") 指定列名称,如下所示:

@Table(name = "registration")
@Entity
public class Registration{

   @Id
   @Column(name = "r_id")
   @GeneratedValue(strategy = GenerationType.AUTO)
   private int id;

   @Basic
   @Column(name = "r_name")
   private String name;

   // getters and setters

}

如果您使用Intellij IDEA,那么 IDE 可以生成所需的实体类。

您可以转到持久性选项卡 -> 右键单击​​项目名称 -> 生成持久性映射 -> 按数据库架构。然后选择要生成其实体的表。瞧,一切都很轻松。

现在来解决您的问题,在您的实体类中,如果您设置一些具有 Integer 类型的字段,那么它会将您的表更新为 int4 并使用 allow null BigDecimal 也与 numeric(10,2)allow null 相同。要避免数据库中允许 null,请使用原始类型 intdouble

关于java - Hibernate 在 Spring Boot 1.4 开始时重命名了一些列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50288373/

相关文章:

java - 如何解决android中的ResourceType问题?

php - data-pk 属性未显示在 x-可编辑的 CGridview 中

postgresql - 如何在 PostgreSQL 中为基于 Web 的应用程序设置用户帐户

java - Android AsyncTask onPostExecute 调用晚了?

java - 将数组/指针从 C 转换为 Java

java - 如何查询流程定义的完成实例?

python - Pandas 将数据框写入其他 postgresql 模式

spring - 我可以在 tomcat 上使用一个 hibernate 持久性单元并在部署的 war 之间共享它吗?

java - 将 PostgreSQL Query 转换为对应的 Hibernate Query

java.lang.IllegalArgumentException : Named query not found.(实体管理器未创建 NamedQuery)