2017-07-07 166 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 =创造降 –