0

既存のテーブル構造の継承で、新しい列タイプを追加しています (コードの一部をカットしました)

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Account {
    ......        

    @Column                            // already existed column 
    private String name;               // get/set also applied

    @Column(length=20)                 // new added column 
    @Enumerated(EnumType.STRING)       // get/set also applied 
    private AccountType type; 

    ..........
}

@Entity
public User extends Account {
    ................                   // some other already existed fields
}

私のpersistence.xmlファイルでは、DDL生成に次の戦略ポリシーを使用しています

property name="eclipselink.ddl-generation" value="drop-and-create-tables"

DDL生成がAccountテーブルに新しく追加された列タイプを処理しているとき、正常に作成されますが、 Userテーブルにはそのような種類の列はまったくありません(戦略はTABLE_PER_CLASSです)。データベースを削除して再度作成したときに修正しました。その後、現在の世代の DLL が適用されました。ユーザーのタイプも列として追加されます。誰かがそのような問題に「遭遇」しましたか?DBのドロップと作成で修正しましたが、特に本番DBの場合、将来同じ場合の戦略であるべきかどうかはわかりません

ありがとう、シメオン・アンジェロフ

4

1 に答える 1

3

DDL 生成は、本番用ではなく開発用です。表示されている問題は、テーブルが既に存在する場合、新しいフィールドで作成できないためです。ここで説明されているようにテーブルに追加する場合、ドロップして作成するか、「テーブルの作成または拡張」機能が機能しますhttp://wiki.eclipse.org/EclipseLink/DesignDocs/368365

于 2013-01-29T14:00:03.570 に答える