2017-07-07 164 views
1

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

我有一類叫「員工」有2個字段:ID,名稱

@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 

當我跑我的項目,產生了「員工」表正是我想要有2列: ID,名稱。問題是,如果我分裂「名」成「名字」和「姓氏」是這樣的:

@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 

的「工作人員」表現在包含4列(ID,姓名,名字,姓氏),而不是3。然後我需要自己刪除「名稱」列。無論如何要自動擺脫它?

回答

3

看起來像您使用:

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

78.1使用JPA

spring.jpa.generate-DDL(布爾值)切換功能和關閉,並且 是供應商獨立初始化的數據庫。 spring.jpa.hibernate.ddl-auto(枚舉)是一個 休眠功能,它以更細化的 方式控制行爲。請參閱下面的更多細節。

您可以明確設置spring.jpa.hibernate.ddl,汽車和標準 Hibernate的屬性值是沒有,驗證,更新,創造, 創建降。

,你可以看到有什麼新的(從休眠狀態不同)

DDL-AUTO =更新 - 產生變化它doen't降不映射列。 例如,您可以有一個包含10列的表格,並且僅爲其中的3個表格繪製一個表格,在這種情況下,自動模式可能會刪除它們,但對於非強制性的hibernate/jpa完全映射表格實體。這裏是2011年11月創建的jira票Alter and drop columns with hbm2ddl.auto=update,現在狀態是'不固定'。

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

只是推薦: 如果你不想猜測爲什麼某些東西在生產中被拋棄,最好使用ddl工具。 hibernate.ddl-auto主要用於開發,而不是用於生產。在生產中,您可以不使用或驗證 - 因爲它們是安全的。

+0

TLDR將此鍵更改爲此值。 spring.jpa.hibernate.ddl-AUTO =創造降 –