2017-07-07 119 views
1

spring-boot-starter-data-jpaを使用してJavaクラスからMySQLデータベースにテーブルを作成しようとしています。それは、私がJavaクラスの列名を変更/削除するときを除いて、かなりうまく機能します。ここでは例:スプリングブートJPA:エンティティの変更時にカラムを削除

私は2つのフィールドを持つクラスのコール「スタッフ」を持っている:私は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 

は正確に生成されました: id、name。

@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(boolean)を使用してデータベースを初期化する上で機能を切り替え、オフと ベンダーに依存しています。 spring.jpa.hibernate.ddl-auto(enum)は、 の細かい動作を制御するHibernate機能です。詳細は以下を参照してください。

明示的spring.jpa.hibernate.ddl-自動設定することができますし、標準 Hibernateのプロパティ値がどれも、検証、更新、作成、 作成・ドロップされません。

あなたが(休止状態とは異なる)何も新しい

DDL-オート=アップデートはありません見ることができるように - それがマッピングされていない列を削除doen't変化を生成けど。 たとえば、10個のカラムを持ち、そのうちの3個だけをマッピングするテーブルを持つことができます。この場合、自動モードではドロップできますが、hibernate/jpaフルマッピングテーブルエンティティは必須ではありません。ここでジラチケットAlter and drop columns with hbm2ddl.auto=updateが2011年11月に作成され、ステータスが「固定されていません」です。

dbを頻繁に更新する(ドメインモデルが変更された)場合は、liquibase,のようなddl/dmlツールを使用できます。あなたはXMLファイル内のdbの変更を記述し、ツールを実行すると、すべての変更が自動的に適用されます(自動制御で、以前に変更されたものと現在変更が必要なもの)。

ちょっとお勧めします: 生産中に何かがドロップされた原因を推測したくない場合は、ddlツールを使います。 hibernate.ddl-auto mailyは開発用であり、生産用ではありません。本番環境では、安全であるため、noneを使用したり、検証したりすることができます。

+0

TLDRこのキーをこの値に変更します。 spring.jpa.hibernate.ddl-auto = create-drop –

関連する問題