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を更新する度に不要なカラムを削除する手間が発生してちょっと面倒になったりします。
調べた限りこの不具合の情報は見つからず、プログラムから解消する場合はプラグイン自体に修正をかけるしか方法が無さそうです。テーブル名変更が可能な状況であればそもそも不具合が発生しないようテーブル名の変更を検討するのが良さそうです。