DomaCodeGenでテーブル名が近似するテーブルが存在すると、異なるテーブルのカラムが生成される

DomaCodeGenでEntityを生成する際、テーブル名が近似(というかほぼ同じ)する場合に表題の事象が発生しました。
再現する命名パターンから発生は非常に稀ですが、テーブルの命名規則によっては同じような状況がありそうな為、その時の為の覚書として記事にします。

発生条件

DomaCodeGenでEntityを生成する対象のDBに下記の条件で
テーブル名の文字列のうち、命名の異なる部分が`_`のみとなるテーブルが存在する
例) foo_bar と footbar, foo_bar とfoo2bar など

再現する事象

生成されるEntityのうち、`_`を含むテーブルのEntityに、もう一方の近似したテーブル名のカラムが生成される
例) 下記のように異なるカラムを持つfoo_bar と footbarというテーブルがあった場合

create table foo_bar(
    id                     bigserial primary key,
    foo_a                  varchar(255),
    foo_b                  bigint,
    register_date          timestamp,
    update_date            timestamp,
    delete_flag            boolean
);

create table footbar(
   id                     bigserial primary key,
   bar_a                  varchar(255),
   bar_b                  bigint,
   register_date          timestamp,
   update_date            timestamp,
   delete_flag            boolean
);

この状況でEntityを生成すると下記のようにfootbarのカラムがfoo_barのEntityに生成されます(footbarのEntityにはfoo_barのカラムは生成されないようです)

@Entity(listener = FooBarListener::class, metamodel = Metamodel())
@Table(name = "foo_bar")
class FooBar : AbstractFooBar() {

    /** */
    @Id
    @Column(name = "id")
    var id: Long = -1L

    /** */
    @Column(name = "foo_a")
    var fooA: String? = null

    /** */
    @Column(name = "foo_b")
    var fooB: Long? = -1L

    /** */
    @Column(name = "register_date")
    var registerDate: LocalDateTime? = null

    /** */
    @Column(name = "update_date")
    var updateDate: LocalDateTime? = null

    /** */
    @Column(name = "delete_flag")
    var deleteFlag: Boolean? = null

    // 以下footbarのカラム
    /** */
    @Column(name = "bar_a")
    var barA: String? = null

    /** */
    @Column(name = "bar_b")
    var barB: Long? = -1L
}

 

かなり限定的な条件の為、再現する場面は少ないと思いますが、テーブルに定義されていないカラムがEntityに含まれているとエラーとなりますし、
Entityを更新する度に不要なカラムを削除する手間が発生してちょっと面倒になったりします。

調べた限りこの不具合の情報は見つからず、プログラムから解消する場合はプラグイン自体に修正をかけるしか方法が無さそうです。テーブル名変更が可能な状況であればそもそも不具合が発生しないようテーブル名の変更を検討するのが良さそうです。

 


--------------------------
システム開発のご要望・ご相談はこちらから

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です