簡體   English   中英

Spring boot JPA:刪除實體更改列

[英]Spring boot JPA: remove column on entity change

我嘗試使用spring-boot-starter-data-jpa從java類創建MySQL數據庫中的表。 除非我在java類中更改/刪除列名,否則它工作得很好。 這是一個例子:

我有一個班級電話“工作人員”,有2個字段:id,name

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

@Column(name = "name", length = 15)
private String name;

public Staff() {
}
// some setter and getter here

當我運行我的項目時,一個“Staff”表生成我想要的2列:id,name。 問題是如果我將“name”拆分為“firstname”和“lastname”,如下所示:

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

@Column(name = "firstname", length = 15)
private String firstname;

@Column(name = "lastname", length = 15)
private String lastname;

public Staff() {
}
//some getter and setter here

“Staff”表現在包含4列(id,name,firstname,lastname)而不是3.然后我需要自己刪除“name”列。 反正有沒有自動擺脫它?

看起來你使用:

 spring.jpa.properties.hibernate.ddl-auto=update

78.1使用JPA初始化數據庫

spring.jpa.generate-ddl(boolean)打開和關閉該功能,與供應商無關。 spring.jpa.hibernate.ddl-auto(enum)是一個Hibernate功能,它以更細粒度的方式控制行為。 請參閱下文了解更多詳情。

您可以顯式設置spring.jpa.hibernate.ddl-auto,標准Hibernate屬性值為none,validate,update,create,create-drop。

你可以看到沒有什么新東西(與休眠不同)

ddl-auto = update - 生成更改不會刪除未映射的列。 例如,您可以擁有一個包含10列的表,並且僅映射其中的3列,在這種情況下,自動模式可能會刪除它們,但對於hibernate / jpa完整映射表實體不是必需的。 這里是jira ticket Alter和drop columns with hbm2ddl.auto = update 2011年11月創建,現在狀態為“未修復”。

如果經常更新db(您的域模型已更改),則可以使用liquibaseflywaydb等ddl / dml工具。 您在xml文件和執行工具中描述數據庫更改,所有更改都將自動應用(使用自動控制之前已修改的內容以及現在應修改的內容)。

只是建議:如果你不想猜測為什么某些東西在生產中下垂,最好使用ddl工具。 hibernate.ddl-auto maily用於開發,不用於生產。 在生產中,您可以使用none或驗證 - 因為它們是安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM