エンティティのJavaコードとDDLの生成機能の案

もともとの案としては、Generation Gapパターンを使って親クラスと子クラスのコードを生成して子クラスのコードを好きに変更してもらおうと思っていました。例えばAddressテーブルからエンティティを生成する場合はこんな感じ。

親クラスのコード
@MappedSuperclass
public abstract class AbstractAddress {

    @Id
    @GeneratedValue
    @Column(nullable = false)
    public Integer addressId;

    @Column(length = 20, nullable = true)
    public String street;

    @Version
    @Column(nullable = true)
    public Integer version;
}
子クラスのコード
@Entity
@Table(schema = "PUBLIC")
public class Address extends AbstractAddress {
}

でも、例えば、エンティティを基にSTREETカラムの長さ100にしてDDLを生成したいなぁというときは、子クラスのコードでそれは表現できないので親クラスのコードを触ることになるんですよね。

親クラスのアノテーションの属性を変更
    @Column(length = 100, nullable = true)
    public String street;

これだと、Generation Gapパターンのありがたみがない(親クラスのコードに手を入れているので)。

ということで、わりきってGeneration Gapパターンをつかわずに継承関係を持たないエンティティのコードを出力しようかなぁと思います。
Javaコードを出力するのは最初の1回だけであとはコードを直していくと考えれば親と子でクラスが分かれている必要性がないんですよね。